Сортировать по росту все положительные числа - Lisp

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

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

Сортировать по росту все положительные числа в результирующей множестве, полученной из пересечения двух множеств. В качестве множеств выступают списки с цифр.

Решение задачи: «Сортировать по росту все положительные числа»

textual
Листинг программы
  1. ;; Пересечение множеств:
  2.  
  3. (defun inters (x1 x2)
  4.   (if (null x1) nil
  5.       (if (member (car x1) x2) (cons (car x1) (inters (cdr x1) x2))
  6.                                (inters (cdr x1) x2))))
  7.  
  8. ;; Сортировка выбором
  9.  
  10. (defun vsort (x)
  11.   (if (null x) nil
  12.     (let ((min (apply #'min x)))
  13.          (cons min (vsort (remove-if #'(lambda (y) (= y min)) x :count 1))))))
  14.  
  15. ;; Решение
  16.  
  17. (defun task (x1 x2)
  18.   (vsort (inters x1 x2)))
  19.  
  20. (task '(1 2 3 -1 23 45 5) '(3 4 5 45 16 23 -1))
  21.  
  22. ==> (-1 3 5 23 45)

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

В коде даны три функции:

  1. Функция пересечения множеств inters принимает два множества в качестве аргументов и возвращает множество, содержащее только элементы, которые есть в обоих множествах. Реализована с помощью рекурсии.
  2. Функция сортировки выбором vsort принимает список в качестве аргумента и возвращает список, отсортированный по возрастанию. Реализована с помощью рекурсии и цикла.
  3. Функция task принимает два списка в качестве аргументов и возвращает список, содержащий только положительные числа из обоих списков, отсортированные по росту. Вот разбор кода по шагам:
  4. Создаются три функции: inters, vsort, task.
  5. Функция inters принимает два множества в качестве аргументов и возвращает множество, содержащее только элементы, которые есть в обоих множествах. Реализована с помощью рекурсии. Рекурсия заканчивается, когда первое множество становится пустым.
  6. Функция vsort принимает список в качестве аргумента и возвращает список, отсортированный по возрастанию. Реализована с помощью рекурсии и цикла. В основе рекурсии лежит выбор минимального элемента из списка, который помещается в начало нового списка. Цикл позволяет продолжать выбор новых минимальных элементов до тех пор, пока исходный список не станет пустым.
  7. Функция task принимает два списка в качестве аргументов и возвращает список, содержащий только положительные числа из обоих списков, отсортированные по росту. Сначала выполняется пересечение множеств с помощью функции inters, затем полученный список сортируется по возрастанию с помощью функции vsort.
  8. Вызывается функция task с двумя списками в качестве аргументов: '(1 2 3 -1 23 45 5)' и '(3 4 5 45 16 23 -1). После выполнения функции возвращается отсортированный список: -1 3 5 23 45.

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


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

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

11   голосов , оценка 4.455 из 5

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

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

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