如果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))))
答案 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重写时这些缩小步骤是什么样的?你能在结果列表中找出一个模式并重现它吗?