Определить функцию переставляющую элементы списка 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).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы