Дан список. Написать функцию, которая возвращает количество уровней сложного списка на которых есть два не числовых атома - 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. Если первое условие истинно, то возвращается результат 1.
  2. Если второе условие истинно, то вызывается рекурсивно функция 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, потому что было найдено три уровня вложенности, на которых было два не числовых атома.

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


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

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

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