#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"
как функцию, которой, по его мнению, вы являетесь, потому что вы ее окружили ()
. Неясно, чего вы на самом деле пытаетесь достичь там, поэтому я не могу сказать, как это следует исправить.