Написать рекурсивную функцию, увеличивающую 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)))
    )
)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы