我看了看,但很惊讶没有找到这个问题的答案。
在R5RS方案中,您如何编写一个程序,将列表中的每个元素相互相乘。如果我给出了一个列表'(4 5 6),则程序multiply-list应该返回120. 4 * 5 * 6 = 120。
提前致谢。
答案 0 :(得分:1)
(define (multiply-list l) (apply * l))
尽管变得微不足道。这可能就是为什么你从来没有找到答案的原因:没有人费心写下来......
答案 1 :(得分: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))))))
答案 2 :(得分: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)))))))