Количество чисел, находящихся на заданной глубине - Lisp

Узнай цену своей работы

Формулировка задачи:

Для произвольного списка вычислить количество чисел на заданной глубине ((1 A) ((3 4) (D C)) (2) (A)) 2 –> 2 Хотел задать константу вначале через ( let ((lvl 1)) ), не не совсем понимаю, где ее поднимать, а где уменьшать

Решение задачи: «Количество чисел, находящихся на заданной глубине»

textual
Листинг программы
(defun task (lst lv)
  (cond ((null lst) 0)
        ((zerop lv) (if (numberp (car lst)) (+ 1 (task (cdr lst) lv)) (task (cdr lst) lv)))
        (t (if (listp (car lst)) (+ (task (car lst) (- lv 1)) (task (cdr lst) lv))
                                 (task (cdr lst) lv)))))                  
        
 
==> TASK
 
(task '((1 A) ((3 4) (D C)) (2) (A)) 2)
 
==> 2

Объяснение кода листинга программы

В коде определена функция TASK, которая принимает два аргумента: lst — список чисел и строк, и lv — уровень глубины. Если lst — пустой список, то функция возвращает 0. Если lv равно 0, то проверяется, является ли первый элемент lst числом. Если да, то функция возвращает 1. Если нет, то рекурсивно вызывается функция TASK для остальных элементов списка. Если lv не равно 0, то проверяется, является ли первый элемент lst списком. Если да, то функция возвращает результат рекурсивного вызова функции TASK для первого элемента списка и lv — 1. Если нет, то рекурсивно вызывается функция TASK для остальных элементов списка. Значение переменной lst — '((1 A) ((3 4) (D C)) (2) (A)). Значение переменной lv — 2. Функция TASK вызывается с аргументами '((1 A) ((3 4) (D C)) (2) (A)) и 2. Согласно условию задачи, нам необходимо посчитать количество чисел на заданной глубине. В данном случае, на глубине 2. Проходя по списку, функция TASK увеличивает счетчик на 1 для каждого числа на заданной глубине. В данном случае, на глубине 2 находятся числа 3 и 4. Таким образом, результатом выполнения функции TASK будет число 2.

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


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

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

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