Определите функцию (f s), которая в одноуровневом списке чисел s переставляет все отрицательные элементы в начало списка - Lisp

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

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

Определите функцию (f s), которая в одноуровневом списке чисел s переставляет все отрицательные элементы в начало списка, например, (f '(4 -8 6 -9 -7)) -> (-8 -9 -7 4 6).

Решение задачи: «Определите функцию (f s), которая в одноуровневом списке чисел s переставляет все отрицательные элементы в начало списка»

textual
Листинг программы
(defun neg-pos (lst)
  (append (vl-remove-if-not 'minusp lst)
          (vl-remove-if     'minusp lst)))
 
(defun neg-pos (lst)
  (cond
    ((null lst) nil)
    ((vl-every 'minusp lst) lst)
    ((vl-some 'minusp lst)
     (if (minusp (car lst))
       (cons (car lst) (neg-pos (cdr lst)))
       (append (neg-pos (cdr lst)) (list (car lst)))
     )
    )
    (T lst)
  )
)

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

В коде определена функция neg-pos, которая принимает в качестве аргумента одноуровневый список чисел s. В первом варианте кода функция возвращает список, в котором все отрицательные числа находятся в начале списка. Для этого используется функция vl-remove-if-not, которая удаляет из списка все элементы, для которых указанное условие истинно (то есть все положительные числа). Затем с помощью функции append из двух списков создается один, в котором сначала идут отрицательные числа, а затем положительные. Во втором варианте кода функция использует условную конструкцию cond для определения, что делать в каждом конкретном случае. Если список пустой, то возвращается nil. Если все элементы списка отрицательные, то возвращается сам список. Если в списке есть хотя бы один отрицательный элемент, то он помещается в начало нового списка, а остальная часть списка присоединяется к нему с помощью функции append. Таким образом, функция neg-pos переставляет все отрицательные элементы в начало списка.

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


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

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

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