GitHub - twolodzko/prolog-rs: 在 Rust 中实现的最小 Prolog

这是一个用 Rust 实现的最小的 Prolog 解释器:

  • 用法:可使用Justfile命令运行,如just test运行测试,just build构建独立二进制文件./prologjust 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 特性,如faila,ba;b\+!->=_is、数学运算符和函数、比较运算符、consult加载文件、writenltraceuntrace、特殊语法糖等,更多功能在lib/stdlib.pl标准库中。
  • 局限性和与其他实现的差异:只实现了部分功能,如字符串、浮点数类型、DCG 等不可用;;,运算符的优先级相反;引号原子名中只允许部分转义字符;变量按内存地址排序不可行;复合项的结构与标准 Prolog 不同;算术divmod与 Prolog 定义不同但相互一致;_不绑定导致某些查询逻辑不一致;未进行尾递归优化;跟踪功能简化且有限。
阅读 11
0 条评论