如何区分宏中的过程和语法?

问题描述 投票:0回答:1

可以编写一个执行一元计算的宏:

(define-syntax 1ary
  (syntax-rules ()
    ((_ (1ary arg))
     (let ((1ary-val 1ary)
           (arg-val  arg))
       (1ary-val arg-val)))))

(define (inc x) (+ x 1))
(1ary (inc 0))

但它不适用于语法:

(1ary (quote 0))

如何更改宏以使其适用于语法?

macros racket metaprogramming
1个回答
0
投票

问题是语法不可能作为值传递,因此您尝试计算运算符将会失败,因为

quote
不是像
inc
那样的变量。但这会起作用:

(define-syntax 1ary
  (syntax-rules ()
    ((_ (op arg))
     (op arg))))
© www.soinside.com 2019 - 2024. All rights reserved.