1

有人熟悉这个吗?

编写一个过程,将计算 f 和正整数 n 的过程作为输入,并返回计算 f 的第 n 次重复应用的过程。该程序应该能够按如下方式使用:

((repeated square 2) 5)
625

我知道我为函数组合创建的以下代码将有助于使解决方案更简单,但我不确定从这里去哪里:

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

2 回答 2

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

(不知道identityScheme里有没有预定义,没有的话写起来也方便。)

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

于 2008-10-30T07:27:47.657 回答
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)))
于 2009-06-05T14:30:57.510 回答