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

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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