Function 计算函数第n次重复应用的Scheme程序?

Function 计算函数第n次重复应用的Scheme程序?,function,scheme,Function,Scheme,有人熟悉这个吗 编写一个将数据作为输入的过程 计算f和a的过程 正整数n并返回 计算第n个数的过程 重复应用f。这个 程序应能被用作 如下: ((repeated square 2) 5) 625 我知道我为函数组合创建的以下代码将有助于使解决方案更简单,但我不确定接下来该怎么做: (define (compose f g) (lambda (x) (f (g x)))) 嗯,你可能想要这样的东西,对吧 ((repeated square 3) 5) -> (square ((repe

有人熟悉这个吗

编写一个将数据作为输入的过程 计算f和a的过程 正整数n并返回 计算第n个数的过程 重复应用f。这个 程序应能被用作 如下:

((repeated square 2) 5)
625
我知道我为函数组合创建的以下代码将有助于使解决方案更简单,但我不确定接下来该怎么做:

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

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

((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
重写时,这些缩减步骤是什么样子的?你能在生成的步骤列表中找出一个模式并复制它吗?

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

((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))))
(define (repeated f n)
  (if (zero? n)
    identity
    (lambda (x) ((repeated f (- n 1)) (f x)))))
(我不知道Scheme中是否预定义了
identity
。如果没有,则很容易编写。)

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

(define (repeated f n)
  (if (zero? n)
    identity
    (lambda (x) ((repeated f (- n 1)) (f x)))))
或者,如果您坚持使用“撰写”:

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