Функция: удалить каждый третий элемент списка - Lisp

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

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

Определить функцию, удаляющую из списка каждый третий элемент и возвращающую в качестве значения полученный список.

Решение задачи: «Функция: удалить каждый третий элемент списка»

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

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

Функция del3 принимает два аргумента: lst и c. Аргумент lst — это список, в котором необходимо удалить каждый третий элемент. Аргумент c — это счетчик, который определяет, какой элемент списка удалять. В функции используется комбинаторный язык программирования, поэтому она реализована с помощью рекурсии. Если список lst пустой, то функция возвращает nil. Если значение c равно 3, то функция вызывает саму себя, передавая в качестве аргумента cdr lst и 1. Это необходимо для удаления каждого третьего элемента в оставшейся части списка. Если значение c не равно 3, то функция создает новый список, включающий в себя первый элемент из lst и результаты вызова функции del3 для оставшейся части списка и увеличенного значения c. В данном примере функция del3 применяется к списку '(1 2 3 4 5 6 7 8 9)' и получает в качестве аргумента c значение 1. Функция удаляет каждый третий элемент из списка и возвращает новый список (1 2 4 5 7 8).

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


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

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

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