Определить позицию и длину его наиболее длинного элемента - 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)

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

В данном коде определён функционал для нахождения наиболее длинного элемента в списке.

  1. Создана функция task, которая принимает три аргумента: lst — список, p — позиция, lm — длина, pm — предыдущая позиция.
  2. В функции используется условие 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.
  3. В основной части кода вызывается функция task с аргументами: '((1 2 3) (1 2 3 4) (1 2) (1 2 3)), 0, 0, 0.
  4. Результатом работы программы является вывод (4 1). Это означает, что наиболее длинный элемент списка — 4, его позиция — 1.

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


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

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

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