Произведение первых двух атомов подсписка - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д