Функция на удаление k-го элемента из списка l - Lisp

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

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

Добрый вечер Не могли бы Вы подсказать мне, как сделать функцию, которая при вводе списка и номера какого-то элемента в списке функция удаляет элемент N из списка, и выводит уже обновлённый? Пример: Входные данные
Листинг программы
  1. (F '(a b a a c a) '4)
Выходные:
Листинг программы
  1. (a b a a a)

Решение задачи: «Функция на удаление k-го элемента из списка l»

textual
Листинг программы
  1. (defun del-by-num (lst n)
  2.   (if (zerop n) (cdr lst) (cons (car lst) (del-by-num (cdr lst) (- n 1)))))
  3.  
  4.  
  5. ==> del-by-num
  6.  
  7. (del-by-num '(a b a a c a) 4)
  8.  
  9. ==> (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы