Получить из списка произвольных атомов список атомов, которые в исходном списке встречаются один раз - Lisp
Формулировка задачи:
Решение задачи: «Получить из списка произвольных атомов список атомов, которые в исходном списке встречаются один раз»
- (defun task (lst)
- (cond ((null lst) nil)
- ((member (car lst) (cdr lst)) (task (remove (car lst) (cdr lst))))
- (t (cons (car lst) (task (cdr lst))))))
- ==> TASK
- (task '(a b c d b c))
- ==> (A D)
Объяснение кода листинга программы
В данном коде определена функция TASK, которая принимает в качестве аргумента список произвольных атомов. Если список пустой, то возвращается NIL. Если в списке есть повторяющиеся атомы, то в ходе рекурсивных вызовов функции TASK, сначала проверяется, является ли первый элемент списка (car lst) повторяющимся. Если это так, то он удаляется из списка (remove (car lst) (cdr lst)) и функция вызывается рекурсивно для оставшейся части списка (task (cdr lst)). Если первый элемент не является повторяющимся, то он добавляется в начало результата (cons (car lst) (task (cdr lst))) и функция вызывается рекурсивно для оставшейся части списка (task (cdr lst)). Таким образом, функция TASK возвращает список уникальных атомов из исходного списка. Пример использования функции TASK: (task '(a b c d b c)) Результат выполнения: (A D)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д