Как исправить ошибку с суммой близких пар в списке - PullRequest
0 голосов
/ 11 мая 2019

Я хочу суммировать каждый список из 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))

когда я запускаю его, я получаю неправильный синтаксис.что я делаю не так?

спасибо ...

1 Ответ

2 голосов
/ 11 мая 2019

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