2009-10-15 66 views
3

我有這個問題上下工夫:Lisp語言:如何寫一個高階函數

之和更高階的過程可以進一步推廣到獲取方面具有固定運營商相結合的理念。數學乘積運算符就是這個想法的一個具體例子,用乘法替換求和運算符的加法。 從下面開始的程序累積,旨在捕捉這個想法。組合器參數表示用於減少術語的運算符,而基本參數表示在沒有要組合的術語時返回的值。例如,如果我們已經實施了累積的過程,那麼我們就可以定義和程序爲:

(定義總和(累加+ 0))

完成累加的定義,使其根據此行爲描述。

  (define accumulate 
      (lambda (combiner base) 
       (lambda (term start next stop) 
        (if (> start stop) 
         ... 
         ...)))) 

我插入的最後兩行:

base 
    (combiner base (accumulate (combiner start stop) start next stop)) 

,但是,我不知道這是否是正確的,也沒有如何實際使用的和程序調用積累,從而總結出號。

+1

不要忘了用「家庭作業」標記你的作業問題 – 2009-10-15 04:35:24

+0

@PaulMcMillan:這不是一個真正的標籤,謝天謝地! – rvighne 2014-08-21 20:02:24

+0

這是我發表評論時的一點。顯然政治已經在這5年間發生了變化。 – 2014-12-04 23:35:03

回答

4

This是學習如何釣魚的好方法。比給魚好得多 。

在此之前,以下介紹如何解決問題。寫一個 函數,它會做什麼(累加+ 0)。不要使用累加功能;只是寫一個defun哪一個做你的功課要求。接下來,寫一個函數,它會做什麼(累計* 1)會做。什麼是相似之處,這兩個函數有什麼區別。大多數情況下,除了出現+和*運算符外,它們應該是相同的。

接下來,請注意,accumulate函數將返回一個函數,它看起來很像您之前編寫的兩個函數。現在,使用你所寫的兩個函數非常相似的見解,考慮如何將這個函數應用於(defun accumulate ...)要返回的函數。