Убрать дубликаты элементов в числовом списке - Lisp
Формулировка задачи:
Здравствуйте!
Нужно итерационно удалить повторы из числового списка (Lisp).
Например, при вводе '(5 8 9 5 8 9) программа должна вывести (5 8 9).
Решение задачи: «Убрать дубликаты элементов в числовом списке»
textual
Листинг программы
(defun make-uniq (lst) (let ((res nil)) (dolist (i lst (reverse res)) (unless (member i res) (push i res))))) ==> make-uniq (make-uniq '(1 2 3 1 2 3 2 2 3 3 5)) ==> (1 2 3 5)
Объяснение кода листинга программы
В коде реализована функция make-uniq, которая удаляет дубликаты из числового списка.
Вот список элементов с их номерами:
(defun make-uniq (lst)— функция с именемmake-uniqпринимает один аргументlst(let ((res nil))— в локальной переменнойresхранится результат(dolist (i lst (reverse res))— циклdolistпроходит по элементамlstв обратном порядке(unless (member i res) (push i res))— если элементiне содержится вres, то он добавляется в конецresс помощью функцииpush)— конец функцииmake-uniqПример использования функции:(make-uniq '(1 2 3 1 2 3 2 2 3 3 5))— вызов функцииmake-uniqс аргументом(1 2 3 1 2 3 2 2 3 3 5)=> (1 2 3 5)— результат работы функции, список без дубликатов(1 2 3 5)