Схема:Почему здесь необходимо использовать условие?
-
21-09-2019 - |
Вопрос
Я попытался написать (простой, т.е.без eqan?
) one?
функция такая:
(define one?
(lambda (n)
((= 1 n))))
Но вышеизложенное не работает, потому что когда я называю это так:
(one? 1)
Меня встречает эта ошибка:
procedure application: expected procedure, given: #t (no arguments)
Правильный путь (от Маленький интриган) написать это:
(define one?
(lambda (n)
(cond
(else (= 1 n)))))
Почему необходимо использовать cond
с else
предложение, вместо того, чтобы просто вернуть (= 1 n)
?
Решение
Нет никаких причин, по которым вы хотели бы это сделать.Я проверю свою копию TLS, когда вернусь домой, чтобы посмотреть, смогу ли я понять, что происходит, но вы не упускаете ничего фундаментального. cond
или что-нибудь.
Ответ на ваше сообщение выше:Это не работает, потому что в теле лямбды есть лишний набор круглых скобок.Должен быть
(lambda (n) (= 1 n))
Дополнительные круглые скобки в вашей версии означают, что вместо возврата значения #t
или #f
, вы пытаетесь вызвать это значение как функцию без аргументов.
Другие советы
не имея копии Маленький интриган удобно, ваш пример выглядит так, как будто должен работать.я думаю cond
является посторонним.В псевдо-C эквивалент (с cond):
int
one(int n)
{
switch (foo) {
default:
return 1 == n;
}
}