Отсортировать список - Lisp
Формулировка задачи:
Решение задачи: «Отсортировать список»
(defn sort (l) (def h (car l) t (cdr l)) (cond (null? l) nil (append (sort (filter (lambda (x) (< x h)) t)) h (sort (filter (lambda (x) (> x h)) t))) )) (tray (sort '(2 1)))
Объяснение кода листинга программы
В данном коде реализована рекурсивная функция сортировки sort, которая принимает на вход список l. Внутри функции определены две переменные: h и t. Значение переменной h равно первому элементу списка l, а значение переменной t равно остальной части списка l (после первого элемента).
Далее, с помощью конструкции cond проверяется, является ли список пустым. Если это так, то возвращается значение nil. Если же список не пустой, то выполняется рекурсивный вызов функции sort, но уже с отфильтрованным списком (с помощью функции filter и лямбда-функции, которая проверяет, меньше ли текущий элемент первого элемента списка). В этот отфильтрованный список добавляется значение h. Если первый элемент списка больше текущего, то вместо него добавляется отсортированная часть списка.
Наконец, вызывается функция tray, которая принимает на вход отсортированный список и выводит его на экран. В данном случае, вызывается функция sort с аргументом '(2 1) (что эквивалентно [2 1]), и результат выводится на экран.
Таким образом, данный код реализует рекурсивную сортировку списка по возрастанию.