这是一个用 Rust 实现的最小的 Prolog 解释器:
- 用法:可使用Justfile命令运行,如
just test运行测试,just build构建独立二进制文件./prolog,just run FILE评估FILE并启动 REPL,just repl启动 REPL;从命令行调用./prolog -e FILE可评估FILE并运行main/0目标后退出。 - 数据类型:数据单位是“项”,包括原子(以小写字母开头,如
foo)、整数(唯一支持的数字类型)、变量(以大写字母或_开头)、复合项(如结构foo(a, b)和列表[1, 2, 3],列表在 Prolog 中也是结构体),没有布尔值,通过统一来评估项。 - 事实、规则和问题:Prolog 程序由事实(如
foo.或bar(a,b,32).)、规则(如mortal(Who) :- person(Who).)和问题(如?- mortal(socrates).)定义。 - 统一:Prolog 广泛使用模式匹配,通过统一来搜索数据库中的匹配项,变量统一后会变为等价或别名,还有一些使用特殊评估规则的过程。
- 特性:涵盖部分 Prolog 特性,如
fail、a,b和a;b、\+、!、->、=、_、is、数学运算符和函数、比较运算符、consult加载文件、write和nl、trace和untrace、特殊语法糖等,更多功能在lib/stdlib.pl标准库中。 - 局限性和与其他实现的差异:只实现了部分功能,如字符串、浮点数类型、DCG 等不可用;
;和,运算符的优先级相反;引号原子名中只允许部分转义字符;变量按内存地址排序不可行;复合项的结构与标准 Prolog 不同;算术div和mod与 Prolog 定义不同但相互一致;_不绑定导致某些查询逻辑不一致;未进行尾递归优化;跟踪功能简化且有限。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。