Дан список. Написать функцию, которая возвращает количество уровней сложного списка на которых есть два не числовых атома - Lisp
Формулировка задачи:
Добрый вечер, такая вот задача
Дан список ((a (2 b c 6) 7) d e ((9 f g) 12 (h 14) 15) ... ). Написать функцию, которая возвращает количество уровней сложного списка на которых есть два не числовых атома.
Решение задачи: «Дан список. Написать функцию, которая возвращает количество уровней сложного списка на которых есть два не числовых атома»
textual
Листинг программы
(defun count-a...as (w) (cond (w (+ (if (> (count-if #'(lambda (a) (and (atom a) (not (numberp a)))) w) 1) 1 0) (count-if #'(lambda (a) (and (listp a) (count-a...as a))) w))) (0))) > (count-a...as '((a (2 b c 6) 7) d e ((9 f g) 12 (h 14) 15))) 3
Объяснение кода листинга программы
В коде определена функция count-a...as
, которая принимает аргумент w
.
Функция использует условный оператор cond
для проверки двух условий:
- Если первое условие истинно, то возвращается результат 1.
- Если второе условие истинно, то вызывается рекурсивно функция
count-a...as
для каждого элемента спискаw
. В первом условии используется функцияcount-if
с анонимной функцией в качестве аргумента. Анонимная функция проверяет, является ли элемент спискаa
атомом и не является ли он числом. Если это так, то функцияcount-if
увеличивает счетчик на 1. Если элемент списка не удовлетворяет условию, то проверяется второй элемент списка. Во втором условии используется рекурсивный вызов функцииcount-a...as
для каждого элемента спискаw
. Если элемент списка является списком, то рекурсивный вызов продолжается. Код был протестирован на примере((a (2 b c 6) 7) d e ((9 f g) 12 (h 14) 15))
, и функция вернула результат 3, потому что было найдено три уровня вложенности, на которых было два не числовых атома.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д