Преобразовать список таким образом, чтобы в начале были расположены нули, а потом – положительные числа - 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)

Объяснение кода листинга программы

Вот что делается в этом коде:

  1. flt — это функция, которая принимает два аргумента: lst и n.
  2. Если lst — это null, то функция возвращает null.
  3. Если lst не является null, то функция проверяет, является ли первый элемент lst положительным числом.
  4. Если это так, то функция вызывает себя для оставшейся части списка, добавляя в начало списка 0 и результат car lst.
  5. Если первый элемент lst отрицательный, то функция вызывает себя для оставшейся части списка, добавляя в начало списка 0 и результат car lst.
  6. Если первый элемент lst не является числом, то функция вызывает себя для оставшейся части списка, добавляя в начало списка 0 и результат car lst.
  7. В конце концов, функция возвращает полученный список. Таким образом, если вы вызовете функцию flt с аргументом (0 1 2 3 -5 -6 -7), она вернет вам следующий список: -7 -6 -5 0 3 2 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы