Frage

Ich bin auf diesen Code gestoßen auf Wikipedia:

(define (pyth x y k)
    (* x x (lambda (x2)
        (* y y (lambda (y2)
            (+ x2 y2 (lambda (x2py2)
                (sqrt x2py2 k))))))))

Der Artikel besagt, dass dieser Code die fortlaufende Version eines anderen Codes ist:

(define (pyth x y)
    (sqrt (+ (* x x) (* y y))))

Ich bin jedoch ziemlich verwirrt:Wie funktioniert das überhaupt?Wie multipliziert man hier eine Zahl mit einem Lambda? (* x x (lambda ...))

War es hilfreich?

Lösung

Im Wikipedia-Beispiel, * bedeutet nicht dasselbe wie * im herkömmlichen Beispiel.

Ich würde das Wikipedia-Beispiel umschreiben als:

(define (pyth x y k)
    (cps-* x x (lambda (x2)
        (cps-* y y (lambda (y2)
            (cps-+ x2 y2 (lambda (x2py2)
                (cps-sqrt x2py2 k))))))))

In dieser Form kann jeder der cps-xxx funktionen führen die angegebene Operation aus und übergeben das Ergebnis dann an das letzte Argument.Man könnte es so nennen:

(pyth 2 3 display)

das würde 2 und 3 multiplizieren, 6 ergeben und dann 6 an übergeben display.(Eigentlich möchten Sie das Ergebnis an a übergeben.) cps-display das zeigte seine anfänglichen Argumente an und rief dann auf ein anderer funktion, die als letzter Parameter angegeben ist).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top