【发布时间】:2022-12-18 11:29:39
【问题描述】:
我正在围绕球拍 syntax-case 宏测试包装器宏。在第 1 步,它没有做任何有趣的事情,只是将所有部分直接传递给 syntax-case,如下所示:
#lang racket
;; definition
(define-syntax guarded-syntax-case
(lambda (x)
(syntax-case x ()
((guarded-syntax-case y (literal ...) clause ...)
#'(syntax-case y (literal ...) clause ...)
))))
;; test case
(define-syntax (binop stx)
(guarded-syntax-case stx () ; *problem site*
[(_ op n1 n2) #'(op n1 n2)]))
但是这个简单的案例失败了,在空括号 () 标记为以下错误问题点上面代码中标注:
; ....rkt:11:27: #%app: missing procedure expression;
; probably originally (), which is an illegal empty application
; after encountering unbound identifier (which is possibly the real problem):
; guarded-syntax-case
; in: (#%app)
我不知道这个简单的传递宏有什么问题。错误消息似乎表明某处有一个未绑定的变量,我无法识别。我认为 literal ... 应该匹配为空。
有人可以帮助解释出了什么问题以及如何修复宏吗?
【问题讨论】: