Определить функцию переставляющую элементы списка L таким образом, чтобы одинаковые элементы оказались рядом - Lisp
Формулировка задачи:
Переставляющую элементы списка L таким образом, чтобы одинаковые элементы оказались рядом.
Например, L = (1 2 1 4 3 1 2 4) –> (1 1 1 2 2 4 4 3).
Решение задачи: «Определить функцию переставляющую элементы списка L таким образом, чтобы одинаковые элементы оказались рядом»
textual
Листинг программы
- (defun F (l)
- (cond
- ((null l) nil)
- (t (append (remove-if-not #'(lambda (x) (equal (car l) x)) l)
- (F (remove (car l) l))))))
- (F '(1 2 1 4 3 1 2 4)) ==> (1 1 1 2 2 4 4 3)
- (F '(a s d f a s d f g h g)) ==> (a a s s d d f f g g h)
Объяснение кода листинга программы
В данном коде определена функция F, которая принимает в качестве аргумента список l. Если список пустой, то возвращается nil. В противном случае, функция удаляет из списка все элементы, которые не равны первому элементу списка (т.е. оставляет только уникальные элементы), затем рекурсивно вызывает себя с оставшимся списком (без первого элемента), и в конце добавляет первый элемент в начало нового списка. Поэтому, если мы применим функцию F к списку '(1 2 1 4 3 1 2 4), то получим список (1 1 1 2 2 4 4 3), а если к списку '(a s d f a s d f g h g), то получим список (a a s s d d f f g g h).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д