Написать рекурсивную функцию в lisp, попарное сложение элементов подсписков

Начинаю разбираться в лиспе, но застыл на одной задаче Собственно вот задание,

Написать функцию, на вход которой подается список из двух списков чисел. Результатом работы функции должен стать список, элементами которого являются поэлементные суммы этих двух подсписков. Например: ((1 3 2)(4 6 3)) ==> (5 9 5)

Нужно сделать без использования циклов, функционалов и без функции присвоения Застыл на том что не могу понять как написать что бы он одновременно просматривал два подмассива и сочетал элементы попарно.

Напишите, пожалуйста.

С меня как обычно ничего


Ответы (1 шт):

Автор решения: Grundy

Алгоритм прост:

  1. Если один из списков пустой - вернуть второй список

  2. В противном случае

    1. Взять головы списков и сложить
    2. вызвать рекурсивно функцию с хвостами списков
    3. вернуть новый список, в котором в качестве головы будет сумма, а в качестве хвоста - результат рекурсивного вызова.

Например:

(defun  zip (a b)
    (cond
        ((NULL a) b)
        ((NULL b) a)
        (T (cons (+ (car a) (car b)) (zip (cdr a) (cdr b))))
    )
)
→ Ссылка