Функция с рекурсией - Lisp

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

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

Написать функцию с использованием рекурсии, которая увеличивает все элементы числового списка в два раза (список может быть многоуровневым).

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

textual
Листинг программы
(defun task (lst)
  (mapcar (lambda (x) (if (atom x) (* 2 x) (task x))) lst))
 
==> TASK
 
(task '(1 2 (3 (((4 5)) 6) 7)))
 
==> (2 4 (6 (((8 10)) 12) 14))

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

В коде определена функция с именем task. Она принимает в качестве аргумента lst, который является списком. Внутри функции происходит следующее:

  1. Функция mapcar вызывается с аргументом (lambda (x) (if (atom x) (* 2 x) (task x))) и lst.
  2. (lambda (x) (if (atom x) (* 2 x) (task x))) — это анонимная функция, которая вызывается для каждого элемента списка lst.
  3. Если элемент является атомом (имеет ноль или более, но не более двух дополнительных слоев), то возвращается его значение, умноженное на 2.
  4. Если элемент является списком, то рекурсивно вызывается функция task с этим элементом в качестве аргумента.
  5. Результатом работы функции mapcar является новый список, в котором каждый элемент либо имеет значение, равное его atom-значению, умноженному на 2, либо является результатом рекурсивного вызова функции task.
  6. Результат функции task вызывается с аргументом '(1 2 (3 (((4 5)) 6) 7)).
  7. Результатом является (2 4 (6 (((8 10)) 12) 14).

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


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

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

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