Замена IF на COND - Lisp
Формулировка задачи:
Есть код, помогите заменить в нем IF на COND:
(defun F (Lst Obj1 Obj2) (if Lst (cons (if (equal (car Lst) Obj1) Obj2 (car Lst)) (F (cdr Lst) Obj1 Obj2))))
Решение задачи: «Замена IF на COND»
textual
Листинг программы
(defun F (Lst Obj1 Obj2) (cond ((null Lst) nil) (t (cons (cond ((equalp (car Lst) Obj1) Obj2) (t (car Lst))) (F (cdr Lst) Obj1 Obj2)))))
Объяснение кода листинга программы
В данном коде определен функционал, который реализует рекурсивную функцию с тремя аргументами. При этом в условии cond
проверяется, является ли список Lst
пустым. Если это так, то возвращается nil
. В противном случае, когда список не пуст, происходит рекурсивный вызов функции F
с двумя аргументами: cdr Lst
и Obj1
, Obj2
.
В главной ветке cond
проверяется, является ли первый элемент списка car Lst
равным Obj1
. Если это так, то возвращается Obj2
. В противном случае, возвращается первый элемент списка car Lst
.
Список переменных:
Lst
- список, с которым работает функцияObj1
- первый объект для сравненияObj2
- второй объект для сравнения Список значений переменных:Lst
- список, содержащий элементы для обработкиObj1
- объект для сравненияObj2
- объект для сравнения
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д