Определить функцию, реализующую поиск позиции минимального элемента в списке - Lisp
Формулировка задачи:
Определить функцию, реализующую поиск позиции минимального элемента в списке. Если список пустой, то ответом должно быть число 0.
Примеры:
>minimum( '(3 2 7 1 4 8) )
4
Решение задачи: «Определить функцию, реализующую поиск позиции минимального элемента в списке»
textual
Листинг программы
(defun pos-min (lst &optional (m (car lst)) (p 1) (c 1)) (cond ((null lst) (if (= c 1) 0 p)) ((< (car lst) m) (pos-min (cdr lst) (car lst) c (+ c 1))) (t (pos-min (cdr lst) m p (+ c 1))))) ==> pos-min (pos-min '(3 2 7 1 4 8)) ==> 4 (pos-min nil) ==> 0
Объяснение кода листинга программы
В данном коде определена функция pos-min, которая принимает два аргумента: lst — список, в котором необходимо найти позицию минимального элемента, и m — переменная, в которую будет помещено значение минимального элемента при первом его обнаружении. Также в качестве необязательных аргументов можно указать начальные значения для переменных m, p и c. Внутри функции используется оператор cond, который позволяет проверить три возможных варианта:
- Если список lst пуст, то возвращается 0, если условие c=1 выполняется.
- Если первый элемент списка lst меньше значения m, то рекурсивно вызывается функция pos-min для оставшейся части списка (cdr lst), при этом значение m заменяется на значение первого элемента (car lst), а значение c увеличивается на 1.
- В противном случае, рекурсивно вызывается функция pos-min для оставшейся части списка (cdr lst), при этом значение m остается неизменным, а значение c увеличивается на 1. Таким образом, функция pos-min осуществляет обход списка с целью нахождения позиции первого вхождения минимального элемента. При этом, если список пуст, то возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д