Рекурсия - Lisp (229103)
Формулировка задачи:
Нужно прочитать из стандартного потока ввода список, содержащий целые числа, значения nil и другие списки. С помощью рекурсии, заменить в прочитанном списке и вложенных в него списках все списки, содержащие только нечетные числа, суммой этих чисел. Вывести в стандартный поток вывода полученный результат.
Решение задачи: «Рекурсия»
textual
Листинг программы
(defun task-fin (lst) (let ((tmp (task lst))) (if (and (listp tmp) (forall tmp 'numberp) (forall tmp 'oddp)) (apply '+ tmp) tmp))) ==> TASK-FIN (task-fin '(1 (3 5) 4)) ==> (1 8 4) (task-fin '(3 5 7)) ==> 15
Объяснение кода листинга программы
В коде определён функционал для выполнения задачи, названной TASK-FIN, с помощью рекурсии.
defun
определяет функцию с именемtask-fin
, которая принимает один аргументlst
.- Функция использует
let
для создания временной переменнойtmp
, которая равна результату выполнения функцииtask
с аргументомlst
. - С помощью условного оператора
if
проверяется, является ли значениеtmp
списком, содержащим только числа и нечётные числа. - Если условие истинно, то с помощью функции
apply
и оператора+
суммируются все элементы в спискеtmp
. - Результатом работы функции является значение
tmp
. Пример использования функции: - Вызов
task-fin '(1 (3 5) 4)
возвращает(1 8 4)
, потому что функция суммирует все числа в списке, которые являются нечётными. - Вызов
task-fin '(3 5 7)
возвращает15
, потому что функция суммирует все числа в списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д