Схема:Почему здесь необходимо использовать условие?

StackOverflow https://stackoverflow.com/questions/1971680

  •  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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top