Преобразовать список таким образом, чтобы в начале были расположены нули, а потом – положительные числа - Lisp
Формулировка задачи:
При этом использование встроенных функций не допускается, считается, что списки имеют двухуровневую структуру
Решение задачи: «Преобразовать список таким образом, чтобы в начале были расположены нули, а потом – положительные числа»
textual
Листинг программы
(defun flt (lst &optional (n nil) (z nil) (p nil)) (cond ((null lst) (append n z p)) ((plusp (car lst)) (flt (cdr lst) n z (cons (car lst) p))) ((minusp (car lst)) (flt (cdr lst) (cons (car lst) n) z p)) (t (flt (cdr lst) n (cons 0 z) p)))) ==> flt (flt '(0 1 2 3 -5 -6 -7)) ==> (-7 -6 -5 0 3 2 1)
Объяснение кода листинга программы
Вот что делается в этом коде:
flt
— это функция, которая принимает два аргумента: lst и n.- Если lst — это null, то функция возвращает null.
- Если lst не является null, то функция проверяет, является ли первый элемент lst положительным числом.
- Если это так, то функция вызывает себя для оставшейся части списка, добавляя в начало списка 0 и результат car lst.
- Если первый элемент lst отрицательный, то функция вызывает себя для оставшейся части списка, добавляя в начало списка 0 и результат car lst.
- Если первый элемент lst не является числом, то функция вызывает себя для оставшейся части списка, добавляя в начало списка 0 и результат car lst.
- В конце концов, функция возвращает полученный список.
Таким образом, если вы вызовете функцию
flt
с аргументом(0 1 2 3 -5 -6 -7)
, она вернет вам следующий список:-7 -6 -5 0 3 2 1
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д