我看了又看,但很惊讶没有找到这个问题的答案。
在 R5RS 方案中,您将如何编写一个将列表中的每个元素彼此相乘的过程。如果给定一个列表 '(4 5 6),那么该过程,multiply-list,应该返回 120。4*5*6=120。
提前致谢。
(define (multiply-list l) (apply * l))
微不足道。这可能就是你永远找不到答案的原因:没有人费心把它写下来……</p>
“建议”的方式:
(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)))))))