Есть пара синтаксических проблем.Для начала вы забыли закрыть скобки для вызова 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)