Определить функцию переставляющую элементы списка L таким образом, чтобы одинаковые элементы оказались рядом - Lisp

Узнай цену своей работы

Формулировка задачи:

Переставляющую элементы списка L таким образом, чтобы одинаковые элементы оказались рядом. Например, L = (1 2 1 4 3 1 2 4) –> (1 1 1 2 2 4 4 3).

Решение задачи: «Определить функцию переставляющую элементы списка L таким образом, чтобы одинаковые элементы оказались рядом»

textual
Листинг программы
  1. (defun F (l)
  2.     (cond
  3.         ((null l) nil)
  4.         (t (append (remove-if-not #'(lambda (x) (equal (car l) x)) l)
  5.             (F (remove (car l) l))))))
  6.  
  7. (F '(1 2 1 4 3 1 2 4)) ==> (1 1 1 2 2 4 4 3)
  8. (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы