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