Для заданного списка определить максимальное количество идущих подряд списков из одного элемента - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д