0

手順:

(define (double fn) (lambda (x) (fn (fn x)))) 

通話時:

(((double (double double)) 1+) 0)

これは正しいです:

(double (lambda (x) (double (double x) 1+) 0))
        ((lambda (x) (double^4 x) 1+) 0)
                ((double^4 1+) 0)
                 (16+ 0)
                    16   

同様に、呼び出すとき:

(((((double double) double) double) 1+) 0)

これは正しいです:

(((double double (double double) double) 1+) 0)
  (double (double (lambda (x) (double (double x) 1+) 0)))
    (double (lambda (x) (double^4 1+) 0))
            ((lambda (x) (double^16 x) 1+) 0)
                         ((double^16 1+) 0)
                              (256+ 0)
                                256
4

1 に答える 1

2

DrRacketのステッパーをお勧めします。一度に1つのステップを表示できます。それはあなたが戻ることさえ可能にします。

ここに画像の説明を入力してください

まず、「HTDP:Advancedwithlambda」という言語を選択しました。それから私はこのプログラムに入りました:

(define (double fn) 
  (lambda (x) (fn (fn x))))

(((double (double double)) add1) 0)

最後にステッパーボタンをクリックしました。

于 2013-02-08T20:19:10.550 に答える