Я пытаюсь вложить оператор if в let, но я не могу заставить let принять оператор else

#functional-programming #scheme

#функциональное программирование #схема

Вопрос:

 (let ((cmd (car linelist))
      (lineitem(if (> (length linelist) 1)
                (cdr linelist)
                ( '("test"))
                             ))))
  

Это всего лишь небольшая часть моего кода, не беспокойтесь ни о каких переменных, все работает нормально, кроме этого:

Я не могу заставить lineitem когда-либо равняться «test». Пока оператор if имеет значение true, все работает нормально. Но если оператор if когда-либо ложен, я получаю это:

  expected a procedure that can be applied to arguments
  given: "test"
  arguments...: [none]
  context...:
  

Я в замешательстве, потому что думаю, что у меня все правильно.

Комментарии:

1. Я не вижу ничего stmt в вашем коде, возможно, поэтому оно никогда не равно "test"

2. Я знал, что что-то напортачил, «lineitem» — это то, что я пытаюсь сделать «тестовым». Извините

3. Совершенно не относится к делу, но length потенциально очень дорого, и программисты-схемы обычно предпочитают (not (null? (cdr ls))) (> (length ls) 1) . ( (not (empty? (rest ls))) если вы современный.)

4. Вы знаете, мой инструктор тоже упоминал об этом. Я буду иметь это в виду, спасибо.

Ответ №1:

Ошибка говорит о том, что вы пытаетесь использовать "test" как функцию, которой, по его мнению, вы являетесь, потому что вы ее окружили () . Неясно, чего вы на самом деле пытаетесь достичь там, поэтому я не могу сказать, как это следует исправить.