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

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

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

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

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

textual
Листинг программы
  1. (defun task (lst)
  2.   (length (flatten lst)))
  3.  
  4. ==> TASK
  5.  
  6. (task '(1 2 3 4 (51 63 74 (38 19) 130 121) 124 132 (145 152)))
  7.  
  8. ==> 15
  9. (defun task (lst)
  10.  (cond ((null lst) 0)
  11.        ((atom (car lst)) (+ 1 (task (cdr lst))))
  12.        (t (+ (task (car lst)) (task (cdr lst))))))
  13.  
  14. ==> TASK
  15.  
  16. (task '(1 2 3 4 (51 63 74 (38 19) 130 121) 124 132 (145 152)))
  17.  
  18. ==> 15

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

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

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


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

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

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы