Рекурсивная сортировка без повторяющихся элементов - Lisp
Формулировка задачи:
Есть сортировка
Нужно модернизировать так, чтобы убрать повторяющиеся элементы
(defun sorting (lst) (cond ((null lst) nil) (T (append (sorting (remove-if (lambda (x) (< (car lst) x)) (cdr lst))) (list (car lst)) (sorting (remove-if (lambda (x) (>= (car lst) x)) (cdr lst))))))) (sorting '(1 2 3 2 -5 -2 0 3))
Решение задачи: «Рекурсивная сортировка без повторяющихся элементов»
textual
Листинг программы
(defun sorting (lst) (cond ((null lst) nil) (T (append (sorting (remove-if (lambda (x) (< (car lst) x)) (cdr lst))) (list (car lst)) (sorting (remove-if (lambda (x) (>= (car lst) x)) (cdr lst))))))) ==> SORTING (defun ssort (lst) (sorting (setof lst))) ==> SSORT (ssort '(1 2 3 2 -5 -2 0 3)) ==> (-5 -2 0 1 2 3)
Объяснение кода листинга программы
В коде представлена реализация рекурсивной функции сортировки без повторяющихся элементов.
- (defun sorting (lst)
- (cond ((null lst) nil)
- (T (append (sorting (remove-if (lambda (x) (< (car lst) x)) (cdr lst)))
- (list (car lst))
- **(sorting (remove-if (lambda (x) (>= (car lst) x)) (cdr lst)))))))
Функция
sorting
принимает на вход списокlst
и рекурсивно сортирует его без повторяющихся элементов. В условииcond
проверяется, является ли список пустым (null lst
). Если это так, то возвращаетсяnil
. Если список не пустой, то возвращается результат рекурсивного вызова функцииsorting
для списка, полученного после удаления элементов, меньших или равных первому элементу списка (remove-if (lambda (x) (< (car lst) x)) (cdr lst)
). К этому результату добавляется первый элемент спискаlst
в виде списка из одного элемента(list (car lst))
. Также выполняется рекурсивный вызов функцииsorting
для списка, полученного после удаления элементов, больших или равных первому элементу списка(remove-if (lambda (x) (>= (car lst) x)) (cdr lst))
. - (defun ssort (lst)
- (sorting (setof lst)))
Функция
ssort
принимает на вход списокlst
и возвращает отсортированный список без повторяющихся элементов, полученный путем вызова функцииsorting
на отсортированном списке(setof lst)
. - (ssort '(1 2 3 2 -5 -2 0 3))
- (-5 -2 0 1 2 3)
Вызывается функция
ssort
с аргументом(1 2 3 2 -5 -2 0 3)
. Результатом является отсортированный список без повторяющихся элементов(-5 -2 0 1 2 3)
, который выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д