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