В SICP (например, 2.6) следующие функции описываются как способы «обойтись без цифр». Я чешу, пытаясь понять это. Для начала, как эти функции вызываются? Могу ли я на самом деле применить их каким-то образом, где вывод будет 1? (Или любое другое число?)
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
Мои первые попытки не увенчались успехом:
Welcome to DrScheme, version 4.1.5 [3m].
Language: Simply Scheme; memory limit: 128 megabytes.
> (add-1 (zero))
. . procedure zero: expects 1 argument, given 0
> (add-1 zero)
#<procedure>
> (add-1 1)
#<procedure>
> ((add-1 1))
. . #<procedure>: expects 1 argument, given 0
>