Lisp списки , разбиение на два списка

Узнай цену своей работы

Формулировка задачи:

Дан список целых чисел , необходимо разбить на два списка, поместив в первый отрицательные, а во второй – положительные элементы исходного списка . Вот с помощью этой функции дописать бы программу (...
(mapcan #'(lambda (x) (if (> x 0) (list x)))
я так понимаю нужна вторая функция :
(mapcan #'(lambda (x) (if (< x 0) (list x)))
и чтобы их результат выводился в разных списках , как это сделать не знаю (...

Решение задачи: «Lisp списки , разбиение на два списка»

textual
Листинг программы
(defun partition (w)
  `(,(remove-if-not #'minusp w)
    ,(remove-if-not #'plusp w)))
 
> (partition '(-2 -1 0 1 2))
((-2 -1) (1 2))

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

В данном коде определённая функция partition, которая принимает один аргумент w. В этой функции используется два выражения со скобками, которые обозначают список. В первом выражении со скобками (remove-if-not #'minusp w) происходит удаление всех элементов из списка w, которые не удовлетворяют условию minusp. То есть, возвращается список, содержащий только те элементы из w, которые меньше нуля. Во втором выражении со скобками (remove-if-not #'plusp w) происходит удаление всех элементов из списка w, которые не удовлетворяют условию plusp. То есть, возвращается список, содержащий только те элементы из w, которые больше или равны нулю. В результате выполнения функции partition с аргументом w, равным (-2 -1 0 1 2), возвращается список ((-2 -1) (1 2)). Это значит, что функция разбила список w на два списка: (-2 -1) и (1 2). Первый список содержит элементы, меньшие нуля, а второй список содержит элементы, большие или равные нулю.

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


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

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

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