Частичная сортировка списка - Lisp

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

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

Доброго времени суток! Я с Lisp-ом не знаком, но очень надеюсь на вашу помощь. Дан список произвольных атомов L. Используя рекурсию и вспомогательные переменные нужно рассортировать список таким образом чтоб: первыми были все цифровые атомы а после следовали символьные атомы.

Решение задачи: «Частичная сортировка списка»

textual
Листинг программы
(defun task (lst)
 (append (remove-if #'numberp lst) (remove-if-not #'numberp lst)))
 
==> TASK
 
(task '(a b s 5 7.0 u))
 
==> (A B S U 5 7.0)
 
(defun task (lst)
 (let ((n nil) (nn nil))
   (iter (for a in lst) (if (numberp a) (collecting a into n) (collecting a into nn)))
   (append n nn)))
 
==> TASK
 
(task '(a b s 5 7.0 u))
 
==> (5 7.0 A B S U)

Объяснение кода листинга программы

В коде определена функция task, которая принимает в качестве аргумента список lst. Задача функции состоит в том, чтобы отсортировать список по числовым элементам в порядке возрастания. Первый вариант реализации функции использует комбинацию функций remove-if и append. Функция remove-if возвращает список, исключив из исходного все элементы, для которых выполняется указанное условие (в данном случае, это число). Функция append объединяет два списка в один. В результате получается список, в котором числовые элементы расположены в начале в порядке возрастания, а остальные элементы сохраняют исходный порядок. Второй вариант реализации функции использует цикл и две переменные: n и nn. Переменная n собирает числовые элементы, а переменная nn - все остальные элементы. В конце функция возвращает их объединение с помощью функции append. Оба варианта реализации выполняют одну и ту же задачу - сортировку списка по числовым элементам в порядке возрастания.

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


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

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

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