Сортировка списка по типу элементов (рекурсивная реализация) - Lisp
Формулировка задачи:
Создать рекурсивную функцию, которая сортирует список, собрав вместе элементы одних типов (целые числа, действительные числа, символы, списки). Спасибо.
например
$ (myfunction (1 56.7 `(99 6 0) р 89 30.8 `(12 89 6) 0 gh)) (1 89 0 56.7 30.8 р gh (99 6 0) (12 89 6))
Решение задачи: «Сортировка списка по типу элементов (рекурсивная реализация)»
textual
Листинг программы
(defun reorg (lst) (append (remove-if-not 'fixedp lst) (remove-if-not 'floatp lst) (remove-if-not 'symbolp lst) (remove-if-not 'listp lst))) ==> REORG (reorg '(1 56.7 (99 6 0) р 89 30.8 (12 89 6) 0 gh)) ==> (1 89 0 56.7 30.8 Р GH (99 6 0) (12 89 6))
Объяснение кода листинга программы
В коде реализована рекурсивная функция reorg, которая сортирует список lst по типу элементов.
Вот список из 20 элементов, оформленных в виде названий переменных и их значений:
lst— исходный списокfixedp— тип элементов, которые нужно удалить из спискаfloatp— тип элементов, которые нужно удалить из спискаsymbolp— тип элементов, которые нужно удалить из спискаlistp— тип элементов, которые нужно удалить из спискаappend— операция добавления элементов в списокremove-if-not— операция удаления элементов из списка, которые не соответствуют заданному условию(1 56.7 (99 6 0) р 89 30.8 (12 89 6) 0 gh)— исходный список, переданный в функциюreorg(1 89 0 56.7 30.8 Р GH (99 6 0) (12 89 6))— результат работы функцииreorg, отсортированный список по типу элементов