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

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

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

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

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

textual
Листинг программы
  1. (defun neg-pos (lst)
  2.   (append (vl-remove-if-not 'minusp lst)
  3.           (vl-remove-if     'minusp lst)))
  4.  
  5. (defun neg-pos (lst)
  6.   (cond
  7.     ((null lst) nil)
  8.     ((vl-every 'minusp lst) lst)
  9.     ((vl-some 'minusp lst)
  10.      (if (minusp (car lst))
  11.        (cons (car lst) (neg-pos (cdr lst)))
  12.        (append (neg-pos (cdr lst)) (list (car lst)))
  13.      )
  14.     )
  15.     (T lst)
  16.   )
  17. )

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

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

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


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

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

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы