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

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

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

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

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

textual
Листинг программы
(defun inc-every (lst)
  (cond ((null lst) nil)
        (t (cons (+ 1 (car lst)) (inc-every (cdr lst))))))
 
==> inc-every
 
(inc-every '(1 2 3 4 5))
 
==> (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
Похожие ответы