Итак, я провел много времени, читая и перечитывая -окончание главы 9 в Маленьком интригане , где аппликативным комбинатором Y является разработан для функции length
. Я думаю, что моя путаница сводится к единственному утверждению, которое противопоставляет две версии длины (до того, как комбинатор будет разложен):
A:
((lambda (mk-length)
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l) 0 )
(else (add1
((mk-length mk-length)
(cdr l))))))))
B:
((lambda (mk-length)
(mk-length mk-length))
(lambda (mk-length)
((lambda (length)
(lambda (l)
(cond
((null? l) 0)
(else (add1 (length (cdr l)))))))
(mk-length mk-length))))
Страница 170 (4-е изд. В)утверждается, что A
возвращает функцию, когда мы применяем ее к аргументу
, а B
не возвращает функцию
, тем самым производя бесконечный регресс самостоятельных -приложений. Я озадачен этим. Если Б страдает от этой проблемы, то я не понимаю, как А ее избежать.