Функция на удаление 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'
был удален из исходного списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д