Определить максимальное количество идущих подряд списков (Scheme) - Lisp

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

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

Для заданного списка определить максимальное количество идущих подряд списков.
Ну помогите пожалуйста с задачкой!

Решение задачи: «Определить максимальное количество идущих подряд списков (Scheme)»

textual
Листинг программы
(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.

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


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

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

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