Разработать функцию вычитания - Lisp
Формулировка задачи:
Разработать арифметическую функцию SUB вычитания натурального числа, используя только функцию вычитания (SUB1), рекурсию, COND и встроенные логические функции.
Решение задачи: «Разработать функцию вычитания»
textual
Листинг программы
(defun sub-n (x y) (cond ((= x y) 0) (T(1+ (sub-n (1- x) y))))) SUB-N (defun sub (x y) (cond ((>= x y) (sub-n x y)) (T (-(sub-n y x))))) SUB (SUB 100 10) 90 (SUB 10 100) -90
Объяснение кода листинга программы
В коде представлены две функции: sub-n и sub.
- Функция
sub-nпринимает два аргументаxиy. - Если
xравноy, то возвращает 0. - Иначе, рекурсивно вызывает себя с аргументами
xиy, уменьшенным на единицу. Функцияsubпринимает два аргументаxиy. - Если
xбольше или равноy, то рекурсивно вызывает функциюsub-nс аргументамиxиy. - Иначе, возвращает разность
yиx(т.е.-(sub-n y x)). В последней строке кода вызывается функцияsubс аргументами 100 и 10. Результатом выполнения является число 90.