在Scheme中重复应用函数?

时间:2008-10-30 08:19:51

标签: function scheme

  

如果f是数值函数且n是正整数,那么我们可以形成f的第n次重复应用,其被定义为x处的值为f的函数(f(...(f(x) ))...))。例如,如果f是函数x + 1,则f的第n次重复应用是函数x + n。如果f是对数字进行平方的运算,则第n次重复应用f是将其参数提升到第2次幂的函数。编写一个过程,该过程将计算f和正整数n的过程作为输入,并返回计算f的第n次重复应用的过程。您的程序应该能够按如下方式使用:

((repeated square 2) 5)
625
     

您可以使用它来简化答案:

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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中预先定义。如果没有,那么很容易编写。)

现在,这不能直接重现,因为你无法将调用之外的代码神奇地包含在重复的任意内容中。但是,使用compose重写时这些缩小步骤是什么样的?你能在结果列表中找出一个模式并重现它吗?