考虑一个程序

时间:2014-09-23 15:14:33

标签: scheme

我如何使用此程序:

(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函数。

1 个答案:

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

编辑:也许一些澄清可能会有所帮助。如果您查看两个过程sumzeno,您会发现它们具有非常相似的结构:条件形式和递归。此外,如果您在最后一个表达式中切换子表达式的位置,您会发现它们几乎相同:

(+ (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))的方式。我希望这是有道理的。