Написать рекурсивную функцию, увеличивающую n-й элемент списка на n - Lisp
Формулировка задачи:
Предположим есть список чисел, нужно написать рекурсивную функцию, которая принимает список чисел и возвращает новый список чисел, основанный на исходном, в котором n-й элемент списка увеличен на номер позиции в списке (нумерация с нуля).
Как можно записать эту функцию без дополнительного параметра?
Кто еще какие варианты предложит?
Пример 1
: Вход: '(0 0 0 0) Выход: '(0 1 2 3)Пример 2
: Вход: '(0 1 2 3) Выход: '(0 2 3 6)Пример 3
: Вход: '(-1 1 -1 1) Выход: '(-1 2 1 4) Я написал реализацию, но она использует дополнитиельный параметр n для сохранения результата:(defun pos+ (lst n)
(if (null lst)
lst
(cons (+ n (car lst)) (pos+ (cdr lst) (+ 1 n)))
)
)
(defparameter lst '(0 0 0 0))
(format t "~a~%" (pos+ lst 0))
Сделал при помощи необязательного аргумента:
(defun pos+ (lst &optional n)
(if (eq n nil)
(setf n 0)
)
(if (null lst)
lst
(cons (+ n (car lst)) (pos+ (cdr lst) (+ 1 n)))
)
)
(defparameter lst '(0 0 0 0))
(format t "~a~%" (pos+ lst))Решение задачи: «Написать рекурсивную функцию, увеличивающую n-й элемент списка на n»
textual
Листинг программы
(defun pos+ (lst &optional (n 0)) (if lst (cons (+ n (car lst)) (pos+ (cdr lst) (+ 1 n))) ) )