我想更改以下表达式的语法:
(> 2 1)
类似于:
(2 greater 1)
我的第一次尝试是以下宏:
(define-syntax greater
(lambda (x)
(syntax-case x (greater)
[(a greater b)
(syntax (> a b))])))
使用此宏失败:“语法错误:更大”
我一直在浏览一些 Scheme 文档,但我找不到这样做的方法。
最佳答案
表达式 (2 greater 1)
是一个应用程序。它扩展为 (#%app 2 greater 1)
。您必须定义自己的 #%app
版本并将其命名为 my-%app
。如果 greater
存在,则交换第一个和第二个参数,否则只需扩展到标准 #%app
。
要使用您的新应用程序,您必须从定义它的文件(模块)中导出它,然后将它导入到您需要特殊应用程序语法的模块中。