Определить функцию, реализующую поиск позиции минимального элемента в списке - Lisp

Узнай цену своей работы

Формулировка задачи:

Определить функцию, реализующую поиск позиции минимального элемента в списке. Если список пустой, то ответом должно быть число 0. Примеры: >minimum( '(3 2 7 1 4 8) ) 4

Решение задачи: «Определить функцию, реализующую поиск позиции минимального элемента в списке»

textual
Листинг программы
  1. (defun pos-min (lst &optional (m (car lst)) (p 1) (c 1))
  2.   (cond ((null lst) (if (= c 1) 0 p))
  3.         ((< (car lst) m) (pos-min (cdr lst) (car lst) c (+ c 1)))
  4.         (t (pos-min (cdr lst) m p (+ c 1)))))
  5.  
  6.  
  7. ==> pos-min
  8. (pos-min '(3 2 7 1 4 8))
  9.  
  10. ==> 4
  11.  
  12. (pos-min nil)
  13.  
  14. ==> 0

Объяснение кода листинга программы

В данном коде определена функция pos-min, которая принимает два аргумента: lst — список, в котором необходимо найти позицию минимального элемента, и m — переменная, в которую будет помещено значение минимального элемента при первом его обнаружении. Также в качестве необязательных аргументов можно указать начальные значения для переменных m, p и c. Внутри функции используется оператор cond, который позволяет проверить три возможных варианта:

  1. Если список lst пуст, то возвращается 0, если условие c=1 выполняется.
  2. Если первый элемент списка lst меньше значения m, то рекурсивно вызывается функция pos-min для оставшейся части списка (cdr lst), при этом значение m заменяется на значение первого элемента (car lst), а значение c увеличивается на 1.
  3. В противном случае, рекурсивно вызывается функция pos-min для оставшейся части списка (cdr lst), при этом значение m остается неизменным, а значение c увеличивается на 1. Таким образом, функция pos-min осуществляет обход списка с целью нахождения позиции первого вхождения минимального элемента. При этом, если список пуст, то возвращается 0.

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


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

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

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы