Определить позицию и длину его наиболее длинного элемента - Lisp
Формулировка задачи:
L – список, элементами которого являются списки. Определить позицию и длину его наиболее длинного элемента.
Пример: (f ‘((0) (1 2) (3 4 5) (6 7) (8)))
Результат: (2 3)
Решение задачи: «Определить позицию и длину его наиболее длинного элемента»
textual
Листинг программы
(defun task (lst &optional (p 0) (lm 0) (pm 0)) (cond ((null lst) (list lm pm)) ((atom (car lst)) (task (cdr lst) (1+ p) lm pm)) (t (if (> (length (car lst)) lm) (task (cdr lst) (1+ p) (length (car lst)) p) (task (cdr lst) (1+ p) lm pm))))) ==> task (task '((1 2 3) (1 2 3 4) (1 2) (1 2 3))) ==> (4 1)
Объяснение кода листинга программы
В данном коде определён функционал для нахождения наиболее длинного элемента в списке.
- Создана функция
task
, которая принимает три аргумента: lst — список, p — позиция, lm — длина, pm — предыдущая позиция. - В функции используется условие
cond
, которое проверяет три случая: — Если lst — null, то возвращается список lm pm. — Если lst — атом, то выполняется рекурсивный вызов функции task с аргументами: cdr lst, (1+ p), lm, pm. — Если lst не является атомом, то проверяется, если длина текущего элемента больше lm. Если да, то выполняется рекурсивный вызов функции task с аргументами: cdr lst, (1+ p), (length (car lst)), p. Если длина текущего элемента меньше или равна lm, то выполняется рекурсивный вызов функции task с аргументами: cdr lst, (1+ p), lm, pm. - В основной части кода вызывается функция task с аргументами: '((1 2 3) (1 2 3 4) (1 2) (1 2 3)), 0, 0, 0.
- Результатом работы программы является вывод (4 1). Это означает, что наиболее длинный элемент списка — 4, его позиция — 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д