Схема: почему здесь нужно использовать cond?
Я пытался написать (простой, т.е. без 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)
?
2 ответа
Нет никаких причин, почему вы хотели бы сделать это. Когда я вернусь домой, я проверю свою копию TLS, чтобы узнать, смогу ли я предугадать, что происходит, но вы не пропустите ничего фундаментального cond
или что-нибудь.
Ответ на ваше примечание выше: это не работает, потому что у вас есть дополнительный набор скобок в теле лямбды. Так должно быть
(lambda (n) (= 1 n))
Дополнительные скобки в вашей версии означают, что вместо возврата значения #t
или же #f
вы пытаетесь вызвать это значение как функцию без аргументов.
Не имея под рукой "Маленького интрижка", ваш пример выглядит так, как будто он должен работать. я думаю cond
посторонний. В псевдо-C эквивалент (с cond):
int
one(int n)
{
switch (foo) {
default:
return 1 == n;
}
}