2013-02-08 119 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) 

最后我点击步进按钮。