2008-10-30 70 views
1

如果f是一个数值函数,而n是一个正整数,那么我们可以形成f的第n次重复应用,它被定义为在x处的值为f(f(...(f X))...))。例如,如果f是函数x + 1,那么f的第n次重复应用就是函数x + n。如果f是对数字进行平方运算,则f的第n次重复应用是将其论点提升到2^n次幂的函数。编写一个程序,该程序将一个计算f和一个正整数n的程序作为输入,并返回计算f的第n次重复应用程序。你的程序应该能够被用作如下:在Scheme中重复应用函数?

((repeated square 2) 5) 
625 

你可以使用这个简化的答案:

(define (compose f g) (lambda (x) (f (g x)))) 

回答

1

你刚才删除和reask这个问题?我在这里复制我以前的答案(谢天谢地,我的浏览器缓存了它):

嗯,你可能想要这样的东西吧?

((repeated square 3) 5) 
-> (square ((repeated square 2) 5)) 
-> (square (square ((repeated square 1) 5))) 
-> (square (square (square ((repeated square 0) 5)))) 
-> (square (square (square (identity 5)))) 

(我不知道标识是否在计划预定义的。如果没有,很容易写。)

现在,这不是直接可重复的,因为你不能神奇的外封装代码呼叫重复与任意的东西。但是,使用撰写重写时,这些缩减步骤是什么样的?你能在结果列表中找出一个模式并重现它吗?

1
(define (repeated f n) 
    (if (= n 1) 
     f 
     (compose f (repeated f (- n 1)))))