Сформировать список - 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)
Объяснение кода листинга программы
В коде определён функционал для выполнения задачи, список формируется следующим образом:
- (defun task (n m &optional (c (if (evenp m) m (- m 1))) (r nil)) — функция с тремя аргументами, принимает n, m, и опциональный аргумент c, и возвращает r.
- (cond ((< c n) r) — начало условия.
- (t (task n m (- c 2) (cons c r))))) — если условие не выполняется, то вызывается рекурсивно функция task с аргументами n, m, (-c 2), и (cons c r) в качестве результата предыдущего вызова функции.
- (task 5 10) — вызывает функцию task с аргументами 5 и 10, и результатом будет (6 8 10).
- (task 5 11) — вызывает функцию task с аргументами 5 и 11, и результатом будет (6 8 10).
- (task 4 11) — вызывает функцию task с аргументами 4 и 11, и результатом будет (4 6 8 10).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д