【问题标题】:scheme multiply list items方案乘以列表项
【发布时间】:2012-09-17 16:38:22
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 你应该能够举一个加法的例子(比如这个:stackoverflow.com/questions/9151045/scheme-sum-of-list),然后简单地调整它以使用乘法。
  • 谢谢格雷格!为了记录,我确实尝试寻找一个附加的基础。我在下面提出了一个修改版本,以防其他人在看。

标签: scheme procedure r5rs


【解决方案1】:
(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)))))))

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      “建议”方式:

      (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))))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-10
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 2021-07-30
        • 2022-06-17
        • 1970-01-01
        相关资源
        最近更新 更多