我如何使用此程序:
(define (sum f n )
(if (= n 1)
(f 1)
(+ ( f n ) (sum f (- n 1)))))
为了重新定义以下内容?
(define (zeno n)
(cond ((= n 1)
(/ 1 2))
((> n 1)
(+ (zeno (- n 1))
(/ 1 (expt 2 n))))))
基本上,我正在尝试创建另一个名为zeno-sec的函数,它使用上面写的sum函数。
答案 0 :(得分:1)
程序sum
接受另一个程序f
,您必须找到f
。如果您查看第二个程序zeno
,您可以在f
的第二个子句中找到cond
的可能正文,即(/ 1 (expt 2 n))
。因此f
将是(lambda (a) (/ 1 (expt 2 a)))
。将其与sum
结合使用,zeno-sec
将如下所示:
(define (zeno-sec n)
(sum (lambda (a)
(/ 1 (expt 2 a)))
n))
编辑:也许一些澄清可能会有所帮助。如果您查看两个过程sum
和zeno
,您会发现它们具有非常相似的结构:条件形式和递归。此外,如果您在最后一个表达式中切换子表达式的位置,您会发现它们几乎相同:
(+ (sum f (- n 1))
(f n))
和
(+ (zeno (- n 1))
(/ 1 (expt 2 n)))
查看来电(zeno (- n 1))
与(sum f (- n 1))
类似,(f n)
变为(/ 1 (expt 2 n))
的方式。我希望这是有道理的。