Функция на удаление k-го элемента из списка l - Lisp
Формулировка задачи:
Добрый вечер
Не могли бы Вы подсказать мне, как сделать функцию, которая при вводе списка и номера какого-то элемента в списке функция удаляет элемент N из списка, и выводит уже обновлённый?
Пример:
Входные данные
Выходные:
(F '(a b a a c a) '4)
(a b a a a)
Решение задачи: «Функция на удаление k-го элемента из списка l»
textual
Листинг программы
(defun del-by-num (lst n) (if (zerop n) (cdr lst) (cons (car lst) (del-by-num (cdr lst) (- n 1))))) ==> del-by-num (del-by-num '(a b a a c a) 4) ==> (a b a a a)
Объяснение кода листинга программы
В данном коде определена функция del-by-num, которая принимает два аргумента: lst и n.
Внутри функции используется условная конструкция if, которая проверяет, равно ли значение переменной n нулю. Если это так, то возвращается значение cdr lst, иначе выполняется блок кода, который включает в себя следующие действия:
- Создается новая функция
cons, которая добавляет к ней новый элемент -car lst(первый элемент спискаlst) и вызывается рекурсивно сcdr lstи(- n 1)в качестве аргументов. Таким образом, если значениеnне равно нулю, из спискаlstудаляетсяn-й элемент, и новая функцияconsиспользуется для создания нового списка, который является результатом работы функцииdel-by-num. Если значениеnравно нулю, то возвращается значениеcdr lst. В приведенном примере кода вызывается функцияdel-by-numс аргументами'(a b a a c a)'и4. Результатом выполнения функции будет список'(a b a a a)', так как четвертый элемент'c'был удален из исходного списка.