Написать функцию, которая находит в данном списке подсписок минимальной длины. (HomeLisp) - Lisp
Формулировка задачи:
Решение задачи: «Написать функцию, которая находит в данном списке подсписок минимальной длины. (HomeLisp) - Lisp»
(defun l-min (lst &optional (l (car lst)) (lm (length (car lst)))) (cond ((null lst) l) ((< (length (car lst)) lm) (l-min (cdr lst) (car lst) (length (car lst)))) (t (l-min (cdr lst) l lm)))) (defun task (lst) (let ((ll (remove-if 'atom lst))) (if (null ll) nil (l-min ll)))) (task '((1 2) (3 4) 5 6 (7) (8 9))) ==> (7) (task '((1 2) (3 4) 5 6 (7 8 9) (8 9))) ==> (1 2)
Объяснение кода листинга программы
В коде представлена функция l-min
, которая принимает два аргумента: lst
и опционально l
и lm
.
Если lst
— это пустой список, то возвращается l
. Иначе, если длина первого элемента списка (car lst
) меньше, чем lm
, то рекурсивно вызывается l-min
для списка cdr lst
, при этом l
и lm
передаются как результат вызова функции length
для car lst
. Если длина первого элемента больше или равна lm
, то рекурсивно вызывается l-min
для списка cdr lst
, при этом l
передается как результат вызова функции length
для car lst
, а lm
передается без изменений.
Функция task
принимает один аргумент lst
и возвращает результат вызова функции l-min
для этого аргумента. Перед вызовом l-min
из списка удаляются все атомы.
Вызов функции task
с аргументом ((1 2) (3 4) 5 6 (7) (8 9))
возвращает 7
, так как это минимальная длина подсписка.
Вызов функции task
с аргументом ((1 2) (3 4) 5 6 (7 8 9) (8 9))
возвращает 1 2
, так как это подсписок минимальной длины.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д