1

我看了又看,但很惊讶没有找到这个问题的答案。

在 R5RS 方案中,您将如何编写一个将列表中的每个元素彼此相乘的过程。如果给定一个列表 '(4 5 6),那么该过程,multiply-list,应该返回 120。4*5*6=120。

提前致谢。

4

3 回答 3

1

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

微不足道。这可能就是你永远找不到答案的原因:没有人费心把它写下来……</p>

于 2012-09-26T07:14:39.000 回答
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))))))
于 2012-09-26T12:51:23.580 回答
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)))))))
于 2012-09-26T05:55:08.363 回答