Подсчитать количество пустых списков в заданном списке - Sheme - Lisp
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, очень срочно нужно решить задачу.
Подсчитать количество пустых списков в заданном списке. При этом использование встроенных функций не допускается, считается, что списки имеют многоуровневую структуру.
Решение задачи: «Подсчитать количество пустых списков в заданном списке - Sheme»
textual
Листинг программы
;; racket-lang.org
(define (foo lst)
(for/fold ((acc 0))
((i (in-list lst)))
(match i
((cons x xs) (+ acc (foo i)))
('() (+ acc 1))
(_ acc))))
Объяснение кода листинга программы
В данном коде на языке Lisp (Scheme) реализуется функция подсчета количества пустых списков в заданном списке.
- Создается функция
foo, которая принимает в качестве аргументаlst- список, в котором необходимо подсчитать количество пустых списков. - В функции используется
for/fold, который позволяет выполнять итерацию по элементам списка и одновременно накапливать результат. - В качестве начального значения аккумулятора (acc) используется 0, то есть изначально предполагается, что в списке нет пустых списков.
- В тело цикла
for/foldпопадают все элементы спискаlst. - Для каждого элемента
iвыполняется проверка его структуры с помощьюmatch. - Если элемент
iявляется парой, то естьcons(списк с одним элементом), то к значению аккумулятора прибавляется результат вызова функцииfooдля этого элемента, то есть рекурсивный вызов. - Если элемент
iявляется пустым списком(), то к значению аккумулятора прибавляется 1. - Если элемент
iне является пустым списком, то значение аккумулятора остается неизменным. - Результатом работы функции является количество пустых списков в заданном списке.