Лисп. Как переделать код, чтобы использовались макросы (defmacro) ? - Lisp
Формулировка задачи:
Написать функцию (предикат), что определяет, является ли ее аргументы взаимно простыми числами. Взаимно простыми называются числа, наибольший общий делитель которых равен единице.
Вот код есть:
Листинг программы
- (defun prosti(x1 x2)
- (if (or (= x1 0) (= x2 0))
- (return-from prosti 'нет)
- ( loop for i from 2 to x1 do
- (if (and (= (mod x1 i) 0) (= (mod x2 i) 0)) (return-from prosti 'нет)))) 'да)
Как переделать код, чтобы использовались макросы (defmacro)?
Решение задачи: «Лисп. Как переделать код, чтобы использовались макросы (defmacro) ?»
textual
Листинг программы
- (define-syntax -gcd
- (syntax-rules ()
- ((_) -1)
- ((_ a) a)
- ((_ a b) (eval #'(if (zero? b)
- a
- (-gcd b (remainder a b)))))
- ((_ a b ...) (eval #'(-gcd a (-gcd b ...))))))
- (define-syntax -co-prime?
- (syntax-rules ()
- ((_ a b)
- (eval #'(= 1 (-gcd a b))))))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д