Рекурсия - Lisp (229103)

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

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

Нужно прочитать из стандартного потока ввода список, содержащий целые числа, значения nil и другие списки. С помощью рекурсии, заменить в прочитанном списке и вложенных в него списках все списки, содержащие только нечетные числа, суммой этих чисел. Вывести в стандартный поток вывода полученный результат.

Решение задачи: «Рекурсия»

textual
Листинг программы
  1. (defun task-fin (lst)
  2.  (let ((tmp (task lst)))
  3.    (if (and (listp tmp) (forall tmp 'numberp) (forall tmp 'oddp)) (apply '+ tmp) tmp)))
  4.  
  5. ==> TASK-FIN
  6.  
  7. (task-fin '(1 (3 5) 4))
  8.  
  9. ==> (1 8 4)
  10.  
  11. (task-fin '(3 5 7))
  12.  
  13. ==> 15

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

В коде определён функционал для выполнения задачи, названной TASK-FIN, с помощью рекурсии.

  1. defun определяет функцию с именем task-fin, которая принимает один аргумент lst.
  2. Функция использует let для создания временной переменной tmp, которая равна результату выполнения функции task с аргументом lst.
  3. С помощью условного оператора if проверяется, является ли значение tmp списком, содержащим только числа и нечётные числа.
  4. Если условие истинно, то с помощью функции apply и оператора + суммируются все элементы в списке tmp.
  5. Результатом работы функции является значение tmp. Пример использования функции:
  6. Вызов task-fin '(1 (3 5) 4) возвращает (1 8 4), потому что функция суммирует все числа в списке, которые являются нечётными.
  7. Вызов task-fin '(3 5 7) возвращает 15, потому что функция суммирует все числа в списке.

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


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

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

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

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

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

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