Dyskusja Y combinator w „The Little Schemer”
Tak więc spędziłem dużo czasu czytając i ponownie czytając zakończenie rozdziału 9 wMały Schemer, gdzie opracowano odpowiedni kombinator Y dlalength
funkcjonować. Myślę, że moje zamieszanie sprowadza się do pojedynczego stwierdzenia, które kontrastuje dwie wersje długości (zanim uwzględni się kombinator):
<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>
Strona 170 (4. ed.) stwierdza, że A
zwraca funkcję, gdy zastosowaliśmy ją do argumentu
podczas gdy B
nie zwraca funkcji
wytwarzając w ten sposób nieskończony regres aplikacji własnych. Jestem przez to zakłopotany. Jeśli B jest nękany przez ten problem, nie widzę, jak A go unika.