Замена 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- объект для сравнения