Написать рекурсивную функцию, увеличивающую 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))) ) )
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д