Для заданного списка определить максимальное количество идущих подряд списков из одного элемента - Lisp

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

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

Для заданного списка определить максимальное количество идущих подряд списков из одного элемента, без использование встроенных функций.

Решение задачи: «Для заданного списка определить максимальное количество идущих подряд списков из одного элемента»

textual
Листинг программы
(defn max (a b) (cond (> a b) a b))
(defn one-elem-list (l) (and (list? l) (and (not (null? l)) (null? (cdr l)))))
 
(defn f (l)
    (defn go (a b l)
        (cond (null? l) (max a b)
              (one-elem-list (car l)) (go a (+ 1 b) (cdr l))
              (go (max a b) 0 (cdr l))))
    (go 0 0 l))
 
(printLn (f '(1 1 1)))
(printLn (f '(1 (1) (1) 1 (1) ((1 1 1)) (1) (1) (1 1) (1) (1) 1 (1))))
 
.....................
 
0
4

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

  1. Определена функция max, которая возвращает максимальное значение из двух.
  2. Определена функция one-elem-list, которая проверяет, является ли список списком из одного элемента.
  3. Определена функция f, которая рекурсивно обходит каждый элемент списка и проверяет, является ли он списком из одного элемента.
  4. Вызвана функция f с аргументом (1 1 1), которая возвращает максимальное количество списков из одного элемента, равное 1.
  5. Вызвана функция f с аргументом '(1 (1) (1) 1 (1) ((1 1 1)) (1) (1) (1 1) (1) (1) 1 (1)' и выведено максимальное количество списков из одного элемента, равное 4.

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


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

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

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