我想更改以下表达式的语法:

(> 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

要使用您的新应用程序,您必须从定义它的文件(模块)中导出它,然后将它导入到您需要特殊应用程序语法的模块中。

10-06 05:13