Написать рекурсивную функцию, увеличивающую 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 для сохранения результата:
Листинг программы
  1. (defun pos+ (lst n)
  2. (if (null lst)
  3. lst
  4. (cons (+ n (car lst)) (pos+ (cdr lst) (+ 1 n)))
  5. )
  6. )
  7. (defparameter lst '(0 0 0 0))
  8. (format t "~a~%" (pos+ lst 0))
Как можно записать эту функцию без дополнительного параметра?
Сделал при помощи необязательного аргумента:
Листинг программы
  1. (defun pos+ (lst &optional n)
  2. (if (eq n nil)
  3. (setf n 0)
  4. )
  5. (if (null lst)
  6. lst
  7. (cons (+ n (car lst)) (pos+ (cdr lst) (+ 1 n)))
  8. )
  9. )
  10. (defparameter lst '(0 0 0 0))
  11. (format t "~a~%" (pos+ lst))
Кто еще какие варианты предложит?

Решение задачи: «Написать рекурсивную функцию, увеличивающую n-й элемент списка на n»

textual
Листинг программы
  1. (defun pos+ (lst &optional (n 0))
  2.     (if lst
  3.         (cons (+ n (car lst)) (pos+ (cdr lst) (+ 1 n)))
  4.     )
  5. )

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


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

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

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы