Для заданного списка определить максимальное количество идущих подряд списков из одного элемента - 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
Объяснение кода листинга программы
- Определена функция
max
, которая возвращает максимальное значение из двух. - Определена функция
one-elem-list
, которая проверяет, является ли список списком из одного элемента. - Определена функция
f
, которая рекурсивно обходит каждый элемент списка и проверяет, является ли он списком из одного элемента. - Вызвана функция
f
с аргументом(1 1 1)
, которая возвращает максимальное количество списков из одного элемента, равное 1. - Вызвана функция
f
с аргументом'(1 (1) (1) 1 (1) ((1 1 1)) (1) (1) (1 1) (1) (1) 1 (1)'
и выведено максимальное количество списков из одного элемента, равное 4.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д