Common lisp 如何在MIT Scheme中编写一个简单的宏?
我正在尝试将这个简单的通用Lisp宏代码转换为MIT Scheme代码:Common lisp 如何在MIT Scheme中编写一个简单的宏?,common-lisp,mit-scheme,Common Lisp,Mit Scheme,我正在尝试将这个简单的通用Lisp宏代码转换为MIT Scheme代码: (defmacro calc (a op b) (list op a b)) (calc 2 + 3) 上述代码按预期打印5 我如何在麻省理工学院的计划中做同样的事情?以下是我的尝试: (defmacro (calc a op b) (list op a b)) (calc 2 + 3) 上述代码失败,出现此错误: Unbound variable: b 在麻省理工学院的方案中,写这段代码的正确方法是什么
(defmacro calc (a op b)
(list op a b))
(calc 2 + 3)
上述代码按预期打印5
我如何在麻省理工学院的计划中做同样的事情?以下是我的尝试:
(defmacro (calc a op b)
(list op a b))
(calc 2 + 3)
上述代码失败,出现此错误:
Unbound variable: b
在麻省理工学院的方案中,写这段代码的正确方法是什么 虽然许多Scheme实现都有
defmacro
,但如果它有Common Lisp、Scheme等参数,或者表达式也是一种特殊形式,则会有所不同。它不是便携式的。在R5RS中,您可以使用`语法规则:
(define-syntax calc
(syntax-rules ()
((_ a op b) ; pattern
(op a b)))) ; expansion
(calc 4 + 3) ; ==> 7
使用DEFINE syntax在
(\uA op b)
开头的\uuuu
是什么意思?@LoneLearner与其他符号一样是一个符号。它将匹配模式中的calc
。有些人喜欢使用这个名称,例如(计算a op b)
,但是你从来没有实际使用过第一个符号,所以经常使用。
。