Сформировать список - Lisp

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

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

Составить программу: Сформировать список содержащее все четные числа больше N но меньше M.

Решение задачи: «Сформировать список»

textual
Листинг программы
(defun task (n m &optional (c (if (evenp m) m (- m 1))) (r nil))
  (cond ((< c n) r)
        (t (task n m (- c 2) (cons c r))))) 
 
==> task
(task 5 10)
 
==> (6 8 10)
 
(task 5 11)
 
==> (6 8 10)
 
(task 4 11)
 
==> (4 6 8 10)

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

В коде определён функционал для выполнения задачи, список формируется следующим образом:

  1. (defun task (n m &optional (c (if (evenp m) m (- m 1))) (r nil)) — функция с тремя аргументами, принимает n, m, и опциональный аргумент c, и возвращает r.
  2. (cond ((< c n) r) — начало условия.
  3. (t (task n m (- c 2) (cons c r))))) — если условие не выполняется, то вызывается рекурсивно функция task с аргументами n, m, (-c 2), и (cons c r) в качестве результата предыдущего вызова функции.
  4. (task 5 10) — вызывает функцию task с аргументами 5 и 10, и результатом будет (6 8 10).
  5. (task 5 11) — вызывает функцию task с аргументами 5 и 11, и результатом будет (6 8 10).
  6. (task 4 11) — вызывает функцию task с аргументами 4 и 11, и результатом будет (4 6 8 10).

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


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

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

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