首先,这是作业,但我只是在寻找有关如何执行此操作的提示或伪代码。

我需要使用 递归 对列表中的所有项目求和。但是,如果遇到列表中不是数字的内容,则需要返回空集。这是我的尝试:

(DEFINE sum-list
  (LAMBDA (lst)
    (IF (OR (NULL? lst) (NOT (NUMBER? (CAR lst))))
      '()
      (+
        (CAR lst)
        (sum-list (CDR lst))
      )
    )
  )
)

这失败了,因为它无法将空集添加到其他内容。通常,如果它不是数字,我只会返回 0 并继续处理列表。

最佳答案

我会这样做:

(define (mysum lst)
  (let loop ((lst lst) (accum 0))
    (cond
      ((empty? lst) accum)
      ((not (number? (car lst))) '())
      (else (loop (cdr lst) (+ accum (car lst)))))))

关于recursion - 方案总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9151045/

10-13 06:30