2013-02-08 116 views
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 
+3

什麼是1 +,16 +,256 +,double^4和double^16? – leppie 2013-02-08 20:02:53

+0

[doubleling function]的可能重複(http://stackoverflow.com/questions/14742866/doubling-function) – dyoo 2013-02-09 02:20:27

回答

2

我會建議在DrRacket步進。它允許您一次顯示一個步驟。它甚至可以讓你回去。

enter image description here

首先,我選擇了語言 「HTDP:先進與拉姆達」。 後來我進入了這個程序:

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

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

最後我點擊步進按鈕。