Как поменять местами в списке минимальный и первый элементы этого списка - Lisp
Формулировка задачи:
Суть задания : дан список из 15 чисел. Наименьшее число в этом списке поменять с первым числом.
Минимальный элемент найти легко, а вот поменять местами уже вызывает трудности. Самая большая трудность заключается в том что индексы использовать нельзя, как и циклы. Нужно все это реализовать через рекурсию, а вот реализовать это не получается.
Как поменять местами в списке минимальный и первый элементы этого списка, не зная позицию и индекса минимального элемента?
Решение задачи: «Как поменять местами в списке минимальный и первый элементы этого списка»
textual
Листинг программы
(defun first-min (w &optional (z (car w)) (m (reduce #'min w)) f &aux (a (car w))) (when w (if (= a m) (cons z (cdr w)) (cons (if f a m) (first-min (cdr w) z m t))))) > (first-min '(2 2 3 4 1 1)) (1 2 3 4 2 1)
Объяснение кода листинга программы
В коде представлена функция first-min
, которая принимает список w
и последовательность f
в качестве аргументов. Если w
не равен nil
, то выполняется следующая последовательность действий:
- Переменная
z
инициализируется значением первого элемента спискаw
. - Переменная
m
инициализируется значением минимального элемента спискаw
. - Переменная
a
инициализируется значением первого элемента спискаw
. - Если
a
равноm
, то возвращается новый список, состоящий изz
и всех остальных элементовw
. - Если
a
не равноm
, то возвращается новый список, состоящий изm
и всех остальных элементовw
. В данном примере функцияfirst-min
применяется к списку(2 2 3 4 1 1)
. Поскольку первый и минимальный элементы списка равны2
, то возвращается новый список(1 2 3 4 2 1)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д