如何在 MIT Scheme 中编写一个简单的宏?
How to write a simple macro in MIT Scheme?
我正在尝试将这个简单的 Common Lisp 宏代码翻译成 MIT Scheme 代码:
(defmacro calc (a op b)
(list op a b))
(calc 2 + 3)
以上代码按预期打印 5
。
如何在 MIT 方案中做同样的事情?这是我的尝试:
(defmacro (calc a op b)
(list op a b))
(calc 2 + 3)
以上代码失败并出现此错误:
Unbound variable: b
在 MIT Scheme 中编写这段代码的正确方法是什么?
虽然许多 Scheme 实现具有 defmacro
,但如果它具有像 Common Lisp、Scheme 中的参数,或者表达式也是一种特殊形式,则有所不同。它不是便携式的。从 R5RS 你可以使用 `syntax-rules:
(define-syntax calc
(syntax-rules ()
((_ a op b) ; pattern
(op a b)))) ; expansion
(calc 4 + 3) ; ==> 7
我正在尝试将这个简单的 Common Lisp 宏代码翻译成 MIT Scheme 代码:
(defmacro calc (a op b)
(list op a b))
(calc 2 + 3)
以上代码按预期打印 5
。
如何在 MIT 方案中做同样的事情?这是我的尝试:
(defmacro (calc a op b)
(list op a b))
(calc 2 + 3)
以上代码失败并出现此错误:
Unbound variable: b
在 MIT Scheme 中编写这段代码的正确方法是什么?
虽然许多 Scheme 实现具有 defmacro
,但如果它具有像 Common Lisp、Scheme 中的参数,或者表达式也是一种特殊形式,则有所不同。它不是便携式的。从 R5RS 你可以使用 `syntax-rules:
(define-syntax calc
(syntax-rules ()
((_ a op b) ; pattern
(op a b)))) ; expansion
(calc 4 + 3) ; ==> 7