2012-09-26 71 views
1

我看了看,但很驚訝沒有找到這個問題的答案。計劃乘法列表項目

在R5RS計劃中,您將如何編寫一個將列表中的每個元素相互相乘的過程。如果我給了一個清單'(4 5 6),程序multiply-list應該返回120. 4 * 5 * 6 = 120。

在此先感謝。

+0

你應該能夠舉一個例子來補充(比如這個:http:// stacko verflow.com/questions/9151045/scheme-sum-of-list)並簡單地適應它使用乘法。 –

+0

謝謝Greg!對於記錄,我確實嘗試尋找另外一個基於它的記錄。我已經提出了一個修改後的版本,以防其他人查找。 – Matt

回答

1

的「建議」的方式:

(define mult 
    (lambda (the-list) 
    (apply * the-list))) 

一個迭代實現:

(define mult-it 
    (lambda (the-list) 
    (let ((result 1)) 
     (begin 
     (for-each 
     (lambda (x) 
      (set! result (* result x))) 
     the-list) 
     result)))) 

一個純粹的功能性和遞歸執行:

(define mult-rec 
    (lambda (the-list) 
    (if (null? the-list) 
     1 
     (* (car the-list) (mult-rec (cdr the-list)))))) 
0
(define (multiply-list list) 
    (let loop ((list list) (accum 1)) 
    (cond 
     ((null? list) accum) 
     ((not (number? (car list))) '()) 
     (else (loop (cdr list) (* accum (car list))))))) 
1

(define (multiply-list l) (apply * l))

微不足道,因爲它得到。這可能是爲什麼你從來沒有找到答案:沒有人打擾寫下來......