parsing - Racket 的语法解析:标识符与预期不匹配
问题描述
我在使用 Racket 时遇到问题syntax-parse
。特别是,我收到以下错误消息:
unknown: rule: expected one of these identifiers: `model', `line', or `rule'
at: rule
in: (rule (predicate (symbol "T") "[" (symbol-list (symbol "X")) "]") "<-" (predicate (symbol "Q") "[" (symbol-list (symbol "X")) "]"))
为什么rule
语法对象与标识符不匹配?我正在调用该函数,如下所示:
(define (parse-carl s)
(syntax-parse s
[((~literal model) ~rest x)
(with-syntax ([x (map parse-carl (syntax-e #'x))]) #'x)]
[((~literal line) x) (with-syntax ([x (parse-carl #'x)]) #'x)]
[((~literal rule) p1 "<-" p2) 'ok]))
这是输入(通过syntax->datum
):
(model (line (rule (predicate (symbol T) [ (symbol-list (symbol X)) ]) <- (predicate (symbol Q) [ (symbol-list (symbol X)) ])))
(line (rule (predicate (symbol Y) [ (symbol-list (symbol X)) ]) <- (predicate (symbol Q) [ (symbol-list (symbol X)) ])))
(line (rule (predicate (symbol Y) [ (symbol-list (symbol X)) ]) <- (predicate (symbol T) [ (symbol-list (symbol X)) ])))
(line (query (rule (predicate (symbol Y) [ (symbol-list (symbol X)) ]) <- (predicate (symbol T) [ (symbol-list (symbol X)) ])) ?))
)
提前致谢。
解决方案
实际上是rule
定义的吗?~literal
识别绑定,因此如果没有绑定,它将不起作用。~datum
在这种情况下,您将需要。
推荐阅读
- docker - Docker Compose:如何配置拆分为多个 Dockerfile 的多阶段 Docker 映像?
- asp.net-core - ASP.NET Core 应用程序在 url https://gearssdk.opswat.com/ 之后注册,即使我没有注册它
- python - 如何从 Google 搜索结果页面中抓取所有结果(Python/Selenium ChromeDriver)
- node.js - firebase 数据库和快递
- firebase - 除非我热刷新,否则数据流不会在 iOS 上显示
- python - 断开我的机器人与语音频道 discord.py 的连接
- node.js - 在graphql中合并不同的模式
- javascript - 将事件侦听器添加到提交按钮以运行函数
- java - 无法从DataSource获取Jdbc连接,不支持认证类型10
- html - 试图在悬停时显示 div 但没有任何效果