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