Function 计算函数第n次重复应用的Scheme程序?
有人熟悉这个吗 编写一个将数据作为输入的过程 计算f和a的过程 正整数n并返回 计算第n个数的过程 重复应用f。这个 程序应能被用作 如下: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
((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)))))
或者,如果您坚持使用“撰写”:
或者,如果您坚持使用“撰写”: