Предикат, переставляющий отрицательные элементы в конец списка - Lisp
Формулировка задачи:
Добрый день! Нужна ваша помощь в решении задачи! Условие: предикат, переставляющий все отрицательные элементы числового списка в конец списка.
Пример: [1,-2,3,-4,-7,4,5] => [1,3,4,5,-2,-4,-7].
Всем откликнувшимся огромное человеческое спасибо!
Решение задачи: «Предикат, переставляющий отрицательные элементы в конец списка»
textual
Листинг программы
(defun F (l &optional s) (if l (if (zerop (car l)) (F (cdr l) (push (car l) s)) (cons (car l) (F (cdr l) s))) s)) (F '(0 1 0 0 2 3 0 4 5)) ==> (1 2 3 4 5 0 0 0 0)
Объяснение кода листинга программы
В коде определён вспомогательный функции с именем F. Если список l не равен nil, то выполняется следующая последовательность действий:
- Проверяется, является ли первый элемент списка l нулём.
- Если это так, то в стек s, который является вторым аргументом функции F, помещается первый элемент списка l.
- Затем рекурсивно вызывается функция F для списка, полученного из l путём удаления его первого элемента.
- В противном случае, то есть если первый элемент списка l не равен нулю, то из l создаётся новый список, в который включается его первый элемент.
- Затем рекурсивно вызывается функция F для списка, полученного из l путём удаления его первого элемента, и к полученному списку добавляется новый список, созданный на шаге 4.
- Если список l равен nil, то возвращается список s. В результате выполнения кода получается список (1 2 3 4 5 0 0 0 0), где все отрицательные элементы (0) находятся в конце списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д