Произведение первых двух атомов подсписка - Lisp
Формулировка задачи:
Помогите пожалуйста! Сижу на зачёте - горю! Нужна программа, которая находит произведение первых двух атомов подсписка
Решение задачи: «Произведение первых двух атомов подсписка»
textual
Листинг программы
(defun task (lst &optional (r 1) (c 0)) (cond ((null lst) 1) ((atom (car lst)) (if (= c 1) (* r (car lst)) (task (cdr lst) (car lst) 1))) (t (task (cdr lst) r c))))
Объяснение кода листинга программы
В коде определена функция task, которая принимает два аргумента: lst и два опциональных аргумента r и c.
Если lst равно nil, то возвращается 1.
Если car lst является атомом, то проверяется значение c. Если c равно 1, то возвращается произведение r и car lst. Если c не равно 1, то вызывается рекурсивно функция task с аргументами cdr lst и car lst, и значение c увеличивается на 1.
Если lst не является пустым списком, то вызывается рекурсивно функция task с аргументами cdr lst и r, и значение c устанавливается в 0.
Код реализован с использованием условий cond, if, car, cdr и nil.