Лисп. Как переделать код, чтобы использовались макросы (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))))))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы