Лисп. Как переделать код, чтобы использовались макросы (defmacro) ? - Lisp

Узнай цену своей работы

Формулировка задачи:

Написать функцию (предикат), что определяет, является ли ее аргументы взаимно простыми числами. Взаимно простыми называются числа, наибольший общий делитель которых равен единице. Вот код есть:
Листинг программы
  1. (defun prosti(x1 x2)
  2. (if (or (= x1 0) (= x2 0))
  3. (return-from prosti 'нет)
  4. ( loop for i from 2 to x1 do
  5. (if (and (= (mod x1 i) 0) (= (mod x2 i) 0)) (return-from prosti 'нет)))) 'да)
Как переделать код, чтобы использовались макросы (defmacro)?

Решение задачи: «Лисп. Как переделать код, чтобы использовались макросы (defmacro) ?»

textual
Листинг программы
  1. (define-syntax -gcd
  2.   (syntax-rules ()
  3.     ((_) -1)
  4.     ((_ a) a)
  5.     ((_ a b) (eval #'(if (zero? b)
  6.                          a
  7.                          (-gcd b (remainder a b)))))
  8.     ((_ a b ...) (eval #'(-gcd a (-gcd b ...))))))
  9.  
  10.  
  11. (define-syntax -co-prime?
  12.   (syntax-rules ()
  13.     ((_ a b)
  14.      (eval #'(= 1 (-gcd a b))))))

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


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

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

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы