在Scheme中使用DCG进行解析(没有Prolog)?
有很多 Prolog-in-Scheme 实现。例如 Kanren、Schelog。
显然,在“AI 编程范式”中,Norvig 在 Lisp 中实现了 Prolog-to-Lisp 编译器,以便使用定语从句语法。
但有没有更简单干净的方法呢?也许巧妙地使用 amb 来避免实现完整的“Prolog”? 在Scheme中进行基于DCG的解析最简单的方法是什么?
Lots of Prolog-in-Scheme implementations are out there. E.g. Kanren, Schelog.
Apparently in "Paradigms of AI Programming" Norvig implements Prolog-to-Lisp compiler in Lisp in order to use Definite Clause Grammars.
But is there a simpler cleaner way? Maybe some clever use of amb to avoid implementing a full "Prolog"?
What is the easiest way to have DCG-based parsing in Scheme?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DCG 同时使用统一和回溯,因此不可避免地要实现 Prolog 的核心。也就是说,您可以将任何纯 Prolog 程序表示为解析空列表的 DCG。
如果您只关心 DCG 的某些特殊情况,例如没有变量的 DCG(仅适用于识别,不适用于解析),则可以这样做。
DCGs use both unification and backtracking, so there's no avoiding implementing the core of Prolog. That is, you can represent any pure Prolog program as a DCG parsing the empty list.
You might do it if you only care about some special case of DCGs, like ones without variables (good only for recognizing, not parsing).