Создать функцию, которая из списка атомов создает список с уникальными атомами - Lisp
Формулировка задачи:
помогите с задачей на лиспе:
Надо создать функцию ATOMI-UNICAT который из списка атомов будит создать новый список из атомов которые не повторяются. Пример:
(ATOMI-UNICAT ’(A B A C B)) -> (C)
Решение задачи: «Создать функцию, которая из списка атомов создает список с уникальными атомами»
textual
Листинг программы
(defun flatten (w) (loop for a in w if (listp a) nconc (flatten a) else collect a)) (defun unique (w &optional (v w)) (cond ((null w) nil) ((> (count (car w) v) 1) (unique (cdr w) v)) ((cons (car w) (unique (cdr w) v))))) (defun unique-atoms (w) (unique (flatten w))) > (unique-atoms '(1 2 (((2 3 4))) 7 (8 (9 1)))) (3 4 7 8 9)
Объяснение кода листинга программы
- Создается функция
flatten
, которая рекурсивно обходит списокw
. - Если элемент
a
является списком, то функцияnconc
объединяет его с результатом рекурсивного вызова функцииflatten
для этого элемента. - Если элемент
a
не является списком, то он добавляется в результат. - Результатом работы функции
flatten
будет список, в котором все элементы списка приведены к одному уровню. - Создается функция
unique
, которая принимает списокw
и необязательный аргументv
. - Если список
w
пустой, то возвращаетсяnil
. - Если элемент
a
встречается в спискеv
более одного раза, то функцияunique
вызывается рекурсивно для спискаcdr
и аргументомv
. - Если элемент
a
встречается в спискеv
только один раз, то он добавляется в результат. - Результатом работы функции
unique
будет список, в котором все элементы списка встречаются только один раз. - Создается функция
unique-atoms
, которая принимает списокw
и вызывает функциюunique
для списка, полученного с помощью функцииflatten
. - Результатом работы функции
unique-atoms
будет список, в котором все элементы являются уникальными атомами списка. - Вызывается функция
unique-atoms
с аргументом'(1 2 (((2 3 4))) 7 (8 (9 1))
- Результатом выполнения функции будет список
(3 4 7 8 9)
, который выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д