Racket 如何在使用语法/解析匹配文本时忽略绑定

Racket 如何在使用语法/解析匹配文本时忽略绑定,racket,Racket,在语法分析中我们可以使用,但这需要考虑绑定。具体来说,它“将任何无标识符的标识符=?与文字id匹配”。我想忽略绑定。具体地说,我想匹配任何一段语法x,以便(equal?(syntax-ex)'一些数据)。在下面的示例中,我希望语法分析能够成功,即使bar具有不同的绑定信息: #lang racket (module m racket (provide foo) (require (for-syntax syntax/parse)) (define-syntax (foo stx)

语法分析中
我们可以使用,但这需要考虑绑定。具体来说,它“将任何无标识符的标识符=?与文字id匹配”。我想忽略绑定。具体地说,我想匹配任何一段语法
x
,以便
(equal?(syntax-ex)'一些数据)
。在下面的示例中,我希望语法分析能够成功,即使
bar
具有不同的绑定信息:

#lang racket

(module m racket
  (provide foo)
  (require (for-syntax syntax/parse))
  (define-syntax (foo stx)
    (syntax-parse stx
      [(_ (~literal bar) x)
       #'x])))

(require 'm)

(define bar 1)
(foo bar 2)

这可能吗?似乎
(~literal bar#:phase-999)
是可行的,但我对phase了解得不够,不知道这有多可靠。

多亏了Alex Knauth的评论。正确的答案是使用:“~datum表单有助于象征性地识别标识符,而~literal表单通过绑定识别标识符。”

在文档中
~literal
下面,您应该可以找到。我想这正是您所描述的您想要的:
(~datum bar)
谢谢!我怎么会错过呢?如果你加上它作为回答,我会接受的。