如果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 次重复应用的过程。您的程序应该能够按如下方式使用:
((repeated square 2) 5) 625
您可以使用它来简化答案:
(define (compose f g) (lambda (x) (f (g x))))
dave
问问题
1678 次
2 回答
2
(define (repeated f n)
(if (= n 1)
f
(compose f (repeated f (- n 1)))))
于 2009-05-05T10:59:00.807 回答
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,如果没有,写起来很容易。)
现在,这不是直接可重现的,因为您无法将代码神奇地包含在对任意内容重复的调用之外。但是,当使用 compose 重写时,这些缩减步骤是什么样的?你能在生成的步骤列表中找出一个模式并重现它吗?
于 2008-10-30T08:24:48.837 回答