LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

x в свою очередь тоже раскрывается в какой-то ~a и так далее.

(define-syntax-rule (foo y) (+ y 1))
(define-syntax-rule (ret x) (return (foo x)))

нормально из одного макроса вызовет другой

в 0-фазе (генерация си-кода) тоже доступен весь racket и можно искаробки делать хуки к компилеру

Так и так можно

(defmacro (create-hash name type)
  `(code ,(format "std::map<~a> ~a;" type name)))

(defmacro (orm-class name db) ; псевдокод
  (define handle (open-db db))
  `(code
    ,(format "class ~a {public: ~a};"
      (string-join 
        (for/list ([field (fields db)])
          (field-description field)) ";\n"))))

Исправление monk, :

x в свою очередь тоже раскрывается в какой-то ~a и так далее.

(define-syntax-rule (foo y) (+ y 1))
(define-syntax-rule (ret x) (return (foo x)))

нормально из одного макросы вызовет другой

в 0-фазе (генерация си-кода) тоже доступен весь racket и можно искаробки делать хуки к компилеру

Так и так можно

(defmacro (create-hash name type)
  `(code ,(format "std::map<~a> ~a;" type name)))

(defmacro (orm-class name db) ; псевдокод
  (define handle (open-db db))
  `(code
    ,(format "class ~a {public: ~a};"
      (string-join 
        (for/list ([field (fields db)])
          (field-description field)) ";\n"))))

Исходная версия monk, :

x в свою очередь тоже раскрывается в какой-то ~a и так далее.

(define-syntax-rule (foo y) (+ y 1))
(define-syntax-rule (ret x) (return (foo x)))
нормально из одного макросы вызовет другой

> в 0-фазе (генерация си-кода) тоже доступен весь racket и можно искаробки делать хуки к компилеру

Так и так можно
(defmacro (create-hash name type)
  `(code ,(format "std::map<~a> ~a;" type name)))

(defmacro (orm-class name db) ; псевдокод
  (define handle (open-db db))
  `(code
    ,(format "class ~a {public: ~a};"
      (string-join 
        (for/list ([field (fields db)])
          (field-description field)) ";\n"))))