У комбинатора дискуссия в «Маленьком интриганке»
Итак, я потратил много времени, читая и перечитывая окончание главы 9 вThe Little Schemerгде аппликативный Y комбинатор разработан дляlength
функция. Я думаю, что моя путаница сводится к одному утверждению, которое контрастирует с двумя версиями длины (до того, как комбинатор выделен):
<code>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)))) </code>
Страница 170 (4-е изд.) утверждает, что
returns a function when we applied it to an argument
пока Б
does not return a function
таким образом производя бесконечный регресс само-приложений. Я озадачен этим. Если B страдает от этой проблемы, я не вижу, как A избегает этого.