miniKanren是一类关系型编程语言。miniKanren可以通过给定的关系表达式和计算结果来反向推导,找出符合条件的输入变量的取值组合。程序员可以通过加入关系表达式对输入变量和计算结果添加约束条件。miniKanren通过“搜索树”的办法来搜索所有可能的输入变量。如果搜索空间非常大而且符合条件的结果不存在,miniKanren的搜索有可能永远也不会停止。

evalo是一个用miniKanren写的程序,evalo是以关系表达式为输入和输出的程序。在miniKanren中调用evalo的方法是:(evalo q q)。evalo具有自产生程式的功能。

Dan Friedman的《The Reasoned Schemer》一书使用miniKanren来介绍关系型编程。该书还提供了miniKanren在Scheme语言上的一个完整实现。该实现的核心代码的长度仅仅只有两页纸。miniKanren的Scheme实现的设计目的是容易理解,修改并扩展。

目前,HaskellRacketRubyClojure以及Python中有miniKanren的具体实现。其中最典型的实现是Scheme的版本。Clojure语言里的core.logic也是受到miniKanren启发。

"Kanren"这个词来自于日语“関連”,即“关联”。

参考资料

外部链接