Функция, вычисляющая максимальный уровень вложения подсписков в списке - Lisp

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

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

Напишите функцию: • вычисляющую максимальный уровень вложения подсписков в списке;

Решение задачи: «Функция, вычисляющая максимальный уровень вложения подсписков в списке»

textual
Листинг программы
(defun max-lv (lst)
  (apply 'max (mapcar (lambda (x) (if (atom x) 0 (+ 1 (max-lv x)))) lst)))
 
==> max-lv
 
(max-lv '(a b (c d (e f) g)))
 
==> 2

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

В данном коде определена функция max-lv, которая принимает в качестве аргумента lst — список. Функция использует следующие функции и операторы:

  1. Apply — применяется к функции и списку аргументов.
  2. Mapcar — применяется к функции и списку аргументов, результат — новый список.
  3. Lambda — определяется анонимная функция.
  4. If — условный оператор.
  5. Atom — проверяет, является ли объект атомом (не является списком).
  6. Plus — оператор сложения.
  7. Max — функция, возвращающая наибольшее значение из списка.
  8. Number — функция, преобразующая объект в число.
  9. Defun — определяется функция. В данном коде реализован рекурсивный алгоритм вычисления максимального уровня вложенности подсписков в списке.
  10. Функция mapcar применяется к аргументу lst, результатом будет новый список, в котором каждый элемент исходного списка (кроме последнего) будет заменён на результат вызова анонимной функции.
  11. Анонимная функция вычисляет уровень вложенности текущего элемента списка. Если элемент является атомом (не является списком), то возвращается 0. Если элемент является списком, то к 1 добавляется результат вызова функции max-lv для этого элемента, поскольку максимальное значение вложенности подсписков в списке не может быть больше, чем сумма максимальных значений вложенности подсписков, являющихся его элементами.
  12. Функция apply применяется к функции max и результату работы функции mapcar. Результатом является максимальное значение из списка.
  13. Функция defun определяет функцию с именем max-lv, которая принимает один аргумент lst и возвращает результат вызова функции apply.
  14. Функция max-lv вызывается с аргументом '(a b (c d (e f) g)) (заключённым в одинарные кавычки), результатом является число 2, поскольку список (c d (e f) g) имеет уровень вложенности 2.

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


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

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

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