【发布时间】:2020-02-13 05:44:19
【问题描述】:
这段代码运行良好:
(require syntax/parse/define (only-in racket [#%app racket:#%app]))
(define-syntax-parser #%app
[(_ Cond {~datum ?} Form1 ...)
#'(when Cond Form1 ...)]
[(_ Cond {~datum ??} Form1 ... {~datum :} Form2 ...)
#'(if Cond (begin Form1 ...) (begin Form2 ...))]
[(_ Xs ...)
#'(racket:#%app Xs ...)]
)
(#t ? (displayln 1))
(#t ?? (displayln 1) : (displayln 2))
但是,我希望将 ?? 更改为单个 ?。 Racket 显示错误,为什么 Racket 不匹配第二种语法?
:: undefined;
cannot reference an identifier before its definition
Racket 是否将 if 语法与右上方的 when 语法混淆了? 如何修复它以对 when 和 if 使用相同的 ??
【问题讨论】:
标签: parsing syntax scheme lisp racket