计算第n次重复应用函数的方案程序?

时间:2008-10-30 05:48:27

标签: function scheme

有人熟悉这个吗?

  

编写一个作为输入的过程   计算f和a的过程   正整数n并返回   计算第n个的程序   反复应用f。该   程序应该可以用作   如下:

((repeated square 2) 5)
625

我知道我为函数组合创建的以下代码将有助于简化解决方案,但我不确定从何处开始:

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

2 个答案:

答案 0 :(得分:1)

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

((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))))

(我不知道是否在Scheme中预定义了identity。如果没有,则很容易编写。)

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

答案 1 :(得分:0)

(define (repeated f n)
  (if (zero? n)
    identity
    (lambda (x) ((repeated f (- n 1)) (f x)))))

或者,如果你坚持使用“撰写”:

(define (repeated f n)
  (if (zero? n)
    identity
    (compose (repeated f (- n 1)) f)))