Java8kanren用 Java 編寫的 miniKanren 實(shí)現(xiàn)
Java8kanren 是用 Java 編寫的 miniKanren 實(shí)現(xiàn)。
miniKanren 是一類關(guān)系型編程語言。miniKanren 可以通過給定的關(guān)系表達(dá)式和計(jì)算結(jié)果來反向推導(dǎo),找出符合條件的輸入變量的取值組合。程序員可以通過加入關(guān)系表達(dá)式對輸入變量和計(jì)算結(jié)果添加約束條件。miniKanren 通過“搜索樹”的辦法來搜索所有可能的輸入變量。如果搜索空間非常大而且符合條件的結(jié)果不存在,miniKanren 的搜索有可能永遠(yuǎn)也不會(huì)停止。
evalo 是一個(gè)用 miniKanren 寫的程序,evalo 是以關(guān)系表達(dá)式為輸入和輸出的程序。在 miniKanren 中調(diào)用 evalo 的方法是:(evalo q q)。evalo 具有自產(chǎn)生程式的功能。
Dan Friedman 的 “The Reasoned Schemer” 一書使用 miniKanren 來介紹關(guān)系型編程。該書還提供了 miniKanren 在 Scheme 語言上的一個(gè)完整實(shí)現(xiàn)。該實(shí)現(xiàn)的核心代碼的長度僅僅只有兩頁紙。miniKanren 的 Scheme 實(shí)現(xiàn)的設(shè)計(jì)目的是容易理解,修改并擴(kuò)展。
目前,Haskell、Racket、 Ruby、Clojure 以及 Python 中有 miniKanren 的具體實(shí)現(xiàn)。其中最典型的實(shí)現(xiàn)是 Scheme 的版本。Clojure 語言里的 core.logic 也是受到 miniKanren 啟發(fā)。
