6

ウィキペディアでこのコードに出くわしました:

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

この記事では、そのコードは別のコードの継続渡しバージョンであると述べています。

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

しかし、私はかなり混乱しています。それはどのように機能するのでしょうか? ここで数値にラムダをどのように掛けますか?(* x x (lambda ...))

4

1 に答える 1

7

ウィキペディアの例では、 は従来の例*と同じ意味ではありません。*

ウィキペディアの例を次のように書き直します。

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

この形式では、各cps-xxx関数は指定された操作を実行し、結果を最後の引数に渡します。次のように呼び出すことができます。

(pyth 2 3 display)

これは 2 と 3 を乗算して 6 を返し、6 を に渡しdisplayます。cps-display(実際には、最初の引数を表示し、最後のパラメーターとして指定された別の関数を呼び出すに結果を渡したいと思うでしょう)。

于 2011-02-20T18:55:30.897 に答える