Использовать рекурсию для подсчета элементов в списке - Lisp

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

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

Добрый день с рекурсией в Lisp не дружу, сможете помочь с задачей? Описать функцию с использованием рекурсии, которая производит подсчет числа элементов-списков заданого списка на всех уровнях вложения.

Решение задачи: «Использовать рекурсию для подсчета элементов в списке»

textual
Листинг программы
(defun task (lst)
  (length (flatten lst)))
 
==> TASK
 
(task '(1 2 3 4 (51 63 74 (38 19) 130 121) 124 132 (145 152)))
 
==> 15
(defun task (lst)
 (cond ((null lst) 0)
       ((atom (car lst)) (+ 1 (task (cdr lst))))
       (t (+ (task (car lst)) (task (cdr lst)))))) 
 
==> TASK
 
(task '(1 2 3 4 (51 63 74 (38 19) 130 121) 124 132 (145 152)))
 
==> 15

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

В первом куске кода мы имеем функцию с именем task, которая принимает в качестве аргумента список lst. Функция использует рекурсию для подсчета количества элементов в списке. Второй кусок кода также представляет функцию с именем task, которая также принимает в качестве аргумента список lst. Здесь используется конструкция cond, которая проверяет различные условия и возвращает соответствующее значение. Если список пуст, функция возвращает 0. Если первый элемент списка является атомом (числом, строкой и т.д.), функция рекурсивно вызывает себя с оставшейся частью списка и добавляет 1 к результату. Если первый элемент списка является не атомом (списком), функция рекурсивно вызывает себя с первым элементом списка и оставшейся частью списка, затем складывает результаты. Оба куска кода выполняют одну и ту же задачу - подсчет количества элементов в списке.

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


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

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

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