【发布时间】:2020-02-17 00:10:46
【问题描述】:
我可以在 Racket 中定义如下中缀“+”:
(require syntax/parse/define (only-in racket (#%app racket:#%app)))
(define-syntax-parser #%app
[(_ Value1 {~datum +} Value2)
#'(+ Value1 Value2)]
[(_ Xs ...)
#'(racket:#%app Xs ...)]
)
(displayln (1 + 2))
我想使用~between 添加多个中缀“+”,但它不起作用:
(require syntax/parse/define (only-in racket (#%app racket:#%app)))
(define-syntax-parser #%app
[(_ {~between {Value1 {~datum +}} 1 100} Value2)
#'(+ Value1 Value2)]
[(_ Xs ...)
#'(racket:#%app Xs ...)]
)
(displayln (1 + 2))
Racket 中的语法在这里:https://docs.racket-lang.org/syntax/stxparse-patterns.html 带有 ~between 但没有 ~repeat。
如何使用 ~between 属性来重复语法中的项目?
我有一个变通办法,但它看起来不是纯多重中缀+,需要将每个左边的条目括在括号中:
(require syntax/parse/define (only-in racket (#%app racket:#%app)))
(define-syntax-parser #%app
[(_ {Value1 {~datum +}} ... Value2)
#'(+ Value1 ... Value2)]
[(_ Xs ...)
#'(racket:#%app Xs ...)]
)
(displayln ({1 +} {2 +} 3))
【问题讨论】:
标签: parsing syntax scheme racket definition