使用Scheme中的DCG进行解析(不使用Prolog)?

z5h*_*z5h 6 scheme parsing prolog dcg

很多Prolog-in-Scheme实施都在那里.例如Kanren,Schelog.

显然,在"AI编程的范例"中,Norvig在Lisp中实现了Prolog-to-Lisp编译器,以便使用Definite Clause Grammars.

但是有更简单的清洁方式吗?也许一些聪明的使用amb来避免实施完整的"Prolog"?在Scheme中进行基于DCG的解析的最简单方法是什么?

Dar*_*con 5

DCG同时使用统一和回溯,因此不可避免地要实现Prolog的核心。也就是说,您可以将任何纯Prolog程序表示为DCG解析空白列表。

如果您只关心DCG的一些特殊情况,例如没有变量的DCG(仅用于识别而不是解析),则可以这样做。