Определите функцию (f s), которая в одноуровневом списке чисел s переставляет все отрицательные элементы в начало списка - Lisp
Формулировка задачи:
Решение задачи: «Определите функцию (f s), которая в одноуровневом списке чисел s переставляет все отрицательные элементы в начало списка»
(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 переставляет все отрицательные элементы в начало списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д