Преобразовать список таким образом, чтобы в начале были расположены нули, а потом – положительные числа - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д