Функция на удаление 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, иначе выполняется блок кода, который включает в себя следующие действия:

  1. Создается новая функция 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' был удален из исходного списка.

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


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

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

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