Определение функции - Lisp (229719)

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

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

Здравствуйте. Никак не могу написать, как определяется функция, которая строит список (1 3 5 7 ... 2*N-1) для заданного N.

Решение задачи: «Определение функции»

textual
Листинг программы
(defun task (n &optional (r nil)) 
  (if (zerop n) r (task (- n 1) (cons (- (* n 2) 1) r))))
 
==> task
 
(task 7)
 
==> (1 3 5 7 9 11 13)

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

В данном коде определена функция с именем task. Она принимает два аргумента: n и r. Аргумент n является целым числом, а аргумент r — списком. Если n равно нулю, то функция возвращает r. В противном случае, функция рекурсивно вызывает саму себя с аргументами n-1 и (cons (умножение n на 2 и 1) r). При вызове функции task со значением 7 в качестве аргумента, функция будет выполнять следующие шаги:

  1. Проверить, равно ли значение аргумента n нулю.
  2. Если это так, то вернуть значение аргумента r.
  3. Если это не так, то вызвать функцию task с аргументами n-1 и (cons (умножение n на 2 и 1) r).
  4. Выполнить рекурсивный вызов функции task.
  5. Повторять шаги 1-4, пока значение аргумента n не станет равным нулю.
  6. Вернуть результат выполнения функции task. В результате выполнения кода, функция task будет возвращать список (1 3 5 7 9 11 13).

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


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

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

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