Добавление единицы каждому второму элементу списка - Lisp

Узнай цену своей работы

Формулировка задачи:

Передо мной стоит задач заполнить список и вывести его, при этом каждый второй символ должен быть на единицу выше. Сам я написал программу которая добавляет единицу ко всем элементам списка, и мне не как не приходит в голову как переделать ее под нужный вариант. Код прилагаю.
Листинг программы
  1. (defun test (ls x)
  2. (do ((curls ls (cdr curls)) res)
  3. ((null curls) (nreverse res))
  4. (setf res (cons (+ x (first curls)) res))))
  5. (test '(1 2 3) 1)
  6. => (2 3 4)
Надеюсь на вашу помощь.

Решение задачи: «Добавление единицы каждому второму элементу списка»

textual
Листинг программы
  1. (defun inc-every (lst)
  2.   (cond ((null lst) nil)
  3.         (t (cons (+ 1 (car lst)) (inc-every (cdr lst))))))
  4.  
  5. ==> inc-every
  6.  
  7. (inc-every '(1 2 3 4 5))
  8.  
  9. ==> (2 3 4 5 6)

Объяснение кода листинга программы

В данном коде представлена функция inc-every, которая принимает в качестве аргумента список lst. Если список пустой, то возвращается nil. В противном случае, возвращается новый список, в котором каждый второй элемент исходного списка увеличен на единицу. Код функции:

  1. defun inc-every (lst) - объявление функции с именем inc-every и аргументом lst типа список.
  2. (cond ((null lst) nil) - проверка условия: если список пустой, то возвращаемnil`.
  3. `(t (cons (+ 1 (car lst)) (inc-every (cdr lst)))) - проверка условия: если список не пустой, то возвращаем новый список, в котором каждый второй элемент увеличен на единицу.
    • cons - создание нового списка с помощью пары car и cdr.
    • + 1 (car lst) - увеличение первого элемента списка на единицу.
    • (inc-every (cdr lst)) - рекурсивный вызов функции для оставшейся части списка.
  4. )' - закрытие условной конструкцииcond`.
  5. inc-every '(1 2 3 4 5)) - вызов функции inc-every с аргументом (1 2 3 4 5).
  6. >(2 3 4 5 6) - вывод результата вызова функции inc-every.

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


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

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

12   голосов , оценка 4.083 из 5

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

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

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