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

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

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

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

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

textual
Листинг программы
  1. (defun task (lst)
  2.  (append (remove-if #'numberp lst) (remove-if-not #'numberp lst)))
  3.  
  4. ==> TASK
  5.  
  6. (task '(a b s 5 7.0 u))
  7.  
  8. ==> (A B S U 5 7.0)
  9.  
  10. (defun task (lst)
  11.  (let ((n nil) (nn nil))
  12.    (iter (for a in lst) (if (numberp a) (collecting a into n) (collecting a into nn)))
  13.    (append n nn)))
  14.  
  15. ==> TASK
  16.  
  17. (task '(a b s 5 7.0 u))
  18.  
  19. ==> (5 7.0 A B S U)

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

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

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


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

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

12   голосов , оценка 3.667 из 5

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

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

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