Как поменять местами в списке минимальный и первый элементы этого списка - 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, то выполняется следующая последовательность действий:

  1. Переменная z инициализируется значением первого элемента списка w.
  2. Переменная m инициализируется значением минимального элемента списка w.
  3. Переменная a инициализируется значением первого элемента списка w.
  4. Если a равно m, то возвращается новый список, состоящий из z и всех остальных элементов w.
  5. Если a не равно m, то возвращается новый список, состоящий из m и всех остальных элементов w. В данном примере функция first-min применяется к списку (2 2 3 4 1 1). Поскольку первый и минимальный элементы списка равны 2, то возвращается новый список (1 2 3 4 2 1).

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


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

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

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