Определить максимальное количество идущих подряд списков (Scheme) - Lisp
Формулировка задачи:
Решение задачи: «Определить максимальное количество идущих подряд списков (Scheme)»
(define (task lst) (define (count x c m) (cond ((null? x) (if (> c m) c m)) ((list? (car x)) (count (cdr x) (+ c 1) m)) (#t (if (> c m) (count (cdr x) 0 c) (count (cdr x) 0 m))))) (count lst 0 0)) (display (task '(1 2 (1) (2) (3) 4 5 (6))))
Объяснение кода листинга программы
В данном коде определена функция task, которая принимает на вход список lst и возвращает максимальное количество списков, идущих подряд. Внутри функции определена вспомогательная функция count, которая принимает три аргумента: x, c и m. Если x равно null, то возвращается значение c, умноженное на m, если c меньше или равно m. Если x является списком, то рекурсивно вызывается count с аргументами (cdr x), (c+1) и m. Если x не является списком (#t), то проверяется условие c меньше или равно m, и если это так, то рекурсивно вызывается count с аргументами (cdr x), (c+1) и m, иначе возвращается значение c. В конце кода вызывается функция count с аргументами lst, 0 и 0, и результат выводится на экран. Код был протестирован на примере списка '(1 2 (1) (2) (3) 4 5 (6)), на котором было получено максимальное количество списков, идущих подряд — 6.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д