Answers:
这三个部分都可以在人工智能中找到:乔治·鲁格(George F. Luger)解决复杂问题的结构和策略。在本书的第四版中,所有这三个部分都在第15.8节“ LISP中的逻辑编程”中的LISP中实现。他还在其他书中加入了相同的代码,但在这里我并没有全部注意。他的书的代码可以在这里找到。
这三部分的另一个来源可以在人工智能编程范例中找到: Peter Norvig 在Common Lisp中的案例研究。请参见第11章,逻辑编程和第12章,编译逻辑程序。他的书的代码可以在这里找到。
另一个来源是Hal Abelson,Jerry Sussman和Julie Sussman编写的计算机程序的结构和解释。请参见第4.4节“逻辑编程”。这本书的站点在这里,这本书的代码在这里。
如果知道从哪里看,找到在许多应用程序中实现了反向链接的统一算法并不罕见。它在函数编译器的类型推断中特别普遍。使用关键字统一或发生有助于发现功能。同样,大多数实现都使用unif作为统一函数的名称。
对于Prolog的版本,减去REPL,在OCaml中完成,请参见“实用逻辑和自动推理手册”的代码和资源 -prolog.ml
可以在此处找到书籍代码到F#的翻译。可以在此处找到本书代码到Haskell的翻译。
在查找代码方面,最容易找到统一算法,然后在应用程序中嵌入带有反向链接的实现。用REPL用功能语言找到Prolog的全功能实现是最困难的。在大多数情况下,代码的格式都不适合在PROLOG中直接使用;它是为增强性能而大量定制的,因此您可以找到代码,但挑剔所需的零件并不值得。我的建议是阅读Luger的书,并以您选择的语言重新构建,即使这意味着安装和学习LISP并进行翻译。
编辑
由于这是StackOverflow的重复问题,并且OP是新的,并且在注释中说:
为了提供更多的上下文,我尝试实现类型推断,但是我的语言的类型系统中的复杂功能(从属类型,提炼类型,线性键入等不那么常见的几种)使我觉得这会可以根据驱动Prolog的算法得出我的类型推断,从而获得非常通用的算法。我会注意到我完全是自学的,所以我的知识在很多领域都缺乏。
我将在此处对此进行扩展,但是意识到OP应该提出一个新问题。
有关一些介绍性内容,请参见实现类型推断。
我所知道的最好的书是Benjamin C. Pierce的类型和编程语言。这本书的网站在这里。链接到OCaml代码的资源在这里。最近开始但几乎完整的翻译成F#在这里。
相关类型:pg。462细化类型:第pg。207线性逻辑和类型系统:109