我想对 2 对关闭的每个列表求和并返回一个新列表,其中每个器官是下 2 对的总和。
我有这个代码:
我做错了什么?
(define (add-consecutives lst)
(if (null? (Cdr lst)
Null
(cons
(+ (car lst) (cadr lst)
(add-consecutives (cadr lst )))))))
(add-consecutives (list 1 2 3 4))
当我运行它时,我得到了错误的语法。 我做错了什么?
谢谢...
最佳答案
有几个语法问题。对于初学者,您忘记关闭 null?
调用的括号,而且递归步骤中的括号放错了位置。所有这些都可以通过适当缩进代码并使用带有语法高亮的 IDE 来避免。
还有更深层次的问题。您推进递归的方式不正确(您需要移动到列表的其余部分)并且您应该在剩下 0、1、2 个元素时处理边缘情况。这应该可以解决所有问题:
(define (add-consecutives lst)
(cond ((null? lst) null)
((null? (cdr lst)) (list (car lst)))
((null? (cddr lst)) (list (+ (car lst) (cadr lst))))
(else (cons (+ (car lst) (cadr lst))
(add-consecutives (cdr lst))))))
让我们尝试一些测试:
(add-consecutives (list))
=> '()
(add-consecutives (list 1))
=> '(1)
(add-consecutives (list 1 2))
=> '(3)
(add-consecutives (list 1 2 3))
=> '(3 5)
(add-consecutives (list 1 2 3 4))
=> '(3 5 7)
关于scheme - 如何修复列表中近对总和的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090785/