Работа со сложными списками - Lisp

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

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

Имеется сложный список. (1 2 ( 3 ( 4 5 ) 6 ) 7 8 ) требуется удалить элементы 3 6 8 Итог выполнения ( 1 2 ( ( 4 5 ) ) 7)

Решение задачи: «Работа со сложными списками»

textual
Листинг программы
(defun remove-elms (w v)
  (loop for a in w 
        if (listp a) collect (remove-elms a v)
        else unless (member a v) collect a))
 
> (remove-elms '(1 2 (3 (4 5) 6) 7 8) '(3 6 8))
(1 2 ((4 5)) 7)

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

Функция remove-elms принимает два аргумента, w и v.

  1. Сначала она использует цикл loop для перебора каждого элемента a в списке w.
  2. Если элемент a является списком, функция рекурсивно вызывает себя с аргументами a и v, чтобы удалить соответствующие элементы из вложенного списка.
  3. Если элемент a не является списком, функция проверяет, является ли он членом списка v. Если нет, то он добавляется в новый список.
  4. В конце функция возвращает новый список без элементов, которые присутствуют в списке v. В данном примере функция remove-elms принимает список w = (1 2 (3 (4 5) 6) 7 8) и список v = (3 6 8).
  5. Начинается перебор элементов списка w.
  6. Первый элемент a = 1 не является списком, поэтому он добавляется в новый список.
  7. Второй элемент a = 2 также не является списком, поэтому он добавляется в новый список.
  8. Третий элемент a = (3 (4 5) 6) является списком, поэтому функция рекурсивно вызывается с аргументами (3 (4 5) 6) и v.
  9. Вложенный список (3 (4 5) 6) теперь проходит через ту же процедуру.
  10. Четвертый элемент a = 4 не является списком, поэтому он добавляется в новый список.
  11. Пятый элемент a = 5 также не является списком, поэтому он добавляется в новый список.
  12. Шестой элемент a = 6 также не является списком, поэтому он добавляется в новый список.
  13. Седьмой элемент a = 7 не является списком, поэтому он добавляется в новый список.
  14. Восьмой элемент a = 8 также не является списком, поэтому он добавляется в новый список.
  15. Функция завершает свою работу и возвращает новый список (1 2 (4 5) 7 8).

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


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

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

15   голосов , оценка 4.133 из 5