方案乘法列表项

时间:2012-09-26 05:41:09

标签: scheme procedure r5rs

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

在R5RS方案中,您如何编写一个程序,将列表中的每个元素相互相乘。如果我给出了一个列表'(4 5 6),则程序multiply-list应该返回120. 4 * 5 * 6 = 120。

提前致谢。

3 个答案:

答案 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)))))))