Написать функцию, которая находит в данном списке подсписок минимальной длины. (HomeLisp) - Lisp

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

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

Буду очень признателен.

Решение задачи: «Написать функцию, которая находит в данном списке подсписок минимальной длины. (HomeLisp) - Lisp»

textual
Листинг программы
(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, так как это подсписок минимальной длины.

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


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

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

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