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