2014-09-23 31 views
1

我怎麼能使用此過程:分解出的程序

(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

程序sum接受另一個程序f,你必須找到f。如果您看第二個程序zeno,則可以在cond的第二個子句中找到f的一個可能主體,即(/ 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))。我希望這是有道理的。