У комбинатора дискуссия в «Маленьком интриганке»

Итак, я потратил много времени, читая и перечитывая окончание главы 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 избегает этого.

Ответы на вопрос(2)

Ваш ответ на вопрос