Создать функцию, которая из списка атомов создает список с уникальными атомами - 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)
, который выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д