Как упростить программу по удалению элемента из списка - Lisp

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

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

Здравствуйте, помогите упростить программу. Программа удаляет следующим образом пример (delete '(1 2 3 4 5 2 4 2) 2) результат (1 3 4 5 2 4 2), то есть удаление без повторения.
(defun delete2(L x)
(cond 
    ((null L) ())
    ((equal x (car L)) ())
    (T (cons (car L) (delete2 (cdr L) x)))
)
)
 
(defun delete1(L x)
(cond 
    ((null L) ())
    ((equal x (car L)) (cdr L))
    (T (delete1 (cdr L) x))
)
)
(defun delete(L x)
(cond
    ((null L) ())
    (T (append (delete2 L x) (delete1 L x)))
)
)

Решение задачи: «Как упростить программу по удалению элемента из списка»

textual
Листинг программы
(defun delete3(x L)
(cond 
    ((null L) nil)
    ((equal x (car L)) (cdr L))
    (T (cons (car L) (delete3 x (cdr L))))
)
)

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

В данном коде определён функционал для удаления третьего (или последующих) элемента из списка, который соответствует заданному условию (x). Вот список с пояснениями к каждому элементу кода:

  1. (defun delete3(x L) - функция с именем delete3 принимает два аргумента: x и L.
  2. (cond - начало условного оператора.
  3. ((null L) nil) - первое условие: если список L пуст, то возвращается nil.
  4. ((equal x (car L)) (cdr L)) - второе условие: если первый элемент списка L равен x, то возвращается список без первого элемента (cdr L).
  5. (T (cons (car L) (delete3 x (cdr L)))) - третье условие: если текущий элемент не равен x, то создаётся новый список, в котором первый элемент - это текущий элемент, а все последующие элементы - это результат вызова функции delete3 для оставшейся части списка (cdr L).
  6. ) - конец условного оператора.
  7. ) - конец функции delete3.

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


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

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

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