2012-10-06 23 views
0

我需要一些幫助來理解這段代碼的作用。我不確定fcombine變量的作用是什麼?有人可以給我一個代碼正在做什麼的演練嗎?理解LISP中代碼片段的問題

(define (reduce fcombine L) 
    (cond 
    ((null? (cdr L)) (car L)) 
    (#t (fcombine (car L) (reduce fcombine (cdr L)))))) 
+0

您可以在這裏查看CLHS'reduce'函數規範:http://www.lispworks.com/documentation/HyperSpec/Body/f_reduce.htm您已經顯示的函數是完整規範的部分實現。 – msandiford

+0

謝謝你,你能否給出答案,我可以接受它? – cougar

+0

只需注意:這與* fold-right *函數的定義非常相似,只不過這裏的初始累加器是列表的最後一個元素。它本質上是一個遍及* L *的循環,在我們訪問單個元素時使用* fcombine *來累積一些結果。這個* reduce *函數在空列表上不起作用,所以它比* fold-right *少一些。 – dyoo

回答

4

您可以查看CLHS reduce function規範。

你已經顯示的功能是部分實現全規格的,只用功能序列參數。

+0

請注意,這不是一個Common Lisp程序 - 它是一個Scheme程序,這是Scheme中非常典型的'reduce'版本。 –

+0

我已經認識到它是方案代碼:)另請參見@dyoo提供的關於'fold- *'的有用信息的評論。 – msandiford