Y-Kombinationsdiskussion in „Der kleine Schemer“

Daher habe ich viel Zeit damit verbracht, das Ende von Kapitel 9 in zu lesen und erneut zu lesenDer kleine Schemer, wo der anwendbare Y - Kombinator für dielength Funktion. Ich denke, meine Verwirrung läuft auf eine einzige Aussage hinaus, die zwei Versionen der Länge gegenüberstellt (bevor der Kombinator herausgerechnet wird):

<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>

Seite 170 (4. Aufl.) gibt an, dass A

Gibt eine Funktion zurück, wenn wir sie auf ein Argument angewendet haben

während B

gibt keine Funktion zurück

Dadurch entsteht eine unendliche Regression der Selbstanwendungen. Ich bin verblüfft. Wenn B von diesem Problem geplagt wird, verstehe ich nicht, wie A es vermeidet.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage