我看了看,但很驚訝沒有找到這個問題的答案。計劃乘法列表項目
在R5RS計劃中,您將如何編寫一個將列表中的每個元素相互相乘的過程。如果我給了一個清單'(4 5 6),程序multiply-list應該返回120. 4 * 5 * 6 = 120。
在此先感謝。
我看了看,但很驚訝沒有找到這個問題的答案。計劃乘法列表項目
在R5RS計劃中,您將如何編寫一個將列表中的每個元素相互相乘的過程。如果我給了一個清單'(4 5 6),程序multiply-list應該返回120. 4 * 5 * 6 = 120。
在此先感謝。
的「建議」的方式:
(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))))))
(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)))))))
(define (multiply-list l) (apply * l))
微不足道,因爲它得到。這可能是爲什麼你從來沒有找到答案:沒有人打擾寫下來......
你應該能夠舉一個例子來補充(比如這個:http:// stacko verflow.com/questions/9151045/scheme-sum-of-list)並簡單地適應它使用乘法。 –
謝謝Greg!對於記錄,我確實嘗試尋找另外一個基於它的記錄。我已經提出了一個修改後的版本,以防其他人查找。 – Matt