【问题标题】:Scheme - sum of list方案 - 列表总和
【发布时间】:2020-02-22 17:02:41
【问题描述】:

我正在尝试实现一个计算列表总和的函数,它的名字是sum -

(define (sum elemList)
  (if
   (null? elemList)
   (+ (car elemList) (sum (cdr elemList)))
   0
  )
 )

上面的实现给出了错误的结果,例如 -

> (sum (list 1 2 3 4 ))
0

我在这里做错了什么?

【问题讨论】:

    标签: functional-programming scheme


    【解决方案1】:

    我认为你交换了 ifthenelse 部分:

    (define (sum elemList)
      (if
        (null? elemList)
        0
        (+ (car elemList) (sum (cdr elemList)))
      )
    )
    

    在原始函数中,对于每个非空列表,都返回0

    【讨论】:

    • 对于空列表会产生错误,因为它会尝试获取空列表的carcdr
    【解决方案2】:

    你也可以使用apply

    (define (sum elemList) (apply + elemList))
    

    应该给你同样的结果

    【讨论】:

      【解决方案3】:

      请参阅此链接了解更多详情。 -http://groups.umd.umich.edu/cis/course.des/cis400/scheme/listsum.htm

      (define(list-sum lst)
          (cond
      ((null ? lst)
          0)
      ((pair? (car lst))
          (+(list-sum (car lst)) (list-sum (cdr lst))))
      (else
          (+ (car lst) (list-sum (cdr lst))))))
      

      【讨论】:

      • 最好在答案中包含链接的重要部分,因为链接可能会中断/更改。还要为您的代码的作用添加解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多