Создать функцию, которая из списка атомов создает список с уникальными атомами - Lisp

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

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

помогите с задачей на лиспе: Надо создать функцию ATOMI-UNICAT который из списка атомов будит создать новый список из атомов которые не повторяются. Пример:
Листинг программы
  1. (ATOMI-UNICAT ’(A B A C B)) -> (C)

Решение задачи: «Создать функцию, которая из списка атомов создает список с уникальными атомами»

textual
Листинг программы
  1. (defun flatten (w)
  2.   (loop for a in w
  3.         if (listp a) nconc (flatten a)
  4.         else collect a))
  5.  
  6. (defun unique (w &optional (v w))
  7.   (cond ((null w) nil)
  8.         ((> (count (car w) v) 1) (unique (cdr w) v))
  9.         ((cons (car w) (unique (cdr w) v)))))
  10.  
  11. (defun unique-atoms (w)
  12.   (unique (flatten w)))
  13.  
  14. > (unique-atoms '(1 2 (((2 3 4))) 7 (8 (9 1))))
  15. (3 4 7 8 9)

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

  1. Создается функция flatten, которая рекурсивно обходит список w.
  2. Если элемент a является списком, то функция nconc объединяет его с результатом рекурсивного вызова функции flatten для этого элемента.
  3. Если элемент a не является списком, то он добавляется в результат.
  4. Результатом работы функции flatten будет список, в котором все элементы списка приведены к одному уровню.
  5. Создается функция unique, которая принимает список w и необязательный аргумент v.
  6. Если список w пустой, то возвращается nil.
  7. Если элемент a встречается в списке v более одного раза, то функция unique вызывается рекурсивно для списка cdr и аргументом v.
  8. Если элемент a встречается в списке v только один раз, то он добавляется в результат.
  9. Результатом работы функции unique будет список, в котором все элементы списка встречаются только один раз.
  10. Создается функция unique-atoms, которая принимает список w и вызывает функцию unique для списка, полученного с помощью функции flatten.
  11. Результатом работы функции unique-atoms будет список, в котором все элементы являются уникальными атомами списка.
  12. Вызывается функция unique-atoms с аргументом '(1 2 (((2 3 4))) 7 (8 (9 1))
  13. Результатом выполнения функции будет список (3 4 7 8 9), который выводится на экран.

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


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

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

10   голосов , оценка 4.3 из 5

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

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

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