MiniKanren

miniKanren是一類關係型編程語言 。 miniKanren可以通過給定的關係表達式和計算結果來反向推導 ， 找出符合條件的輸入變量的取值組合 。 程序員可以通過加入關係表達式對輸入變量和計算結果添加約束條件 。 miniKanren通過 “ 搜索樹 ” 的辦法來搜索所有可能的輸入變量 。 如果搜索空間非常大而且符合條件的結果不存在 ， miniKanren的搜索有可能永遠也不會停止 。 evalo是一個用miniKanren寫的程序 ， evalo是以關係表達式爲輸入和輸出的程序 。 在miniKanren中調用evalo的方法是 ： ( evalo q q ) 。 evalo具有自產生程式的功能 。 Dan Friedman的 《 The Reasoned Schemer 》 一書使用miniKanren來介紹關係型編程 。 該書還提供了miniKanren在Scheme語言上的一個完整實現 。 該實現的核心代碼的長度僅僅只有兩頁紙 。 miniKanren的Scheme實現的設計目的是容易理解 ， 修改並擴展 。 目前 ， Haskell 、 Racket 、 Ruby 、 Clojure以及Python中有miniKanren的具體實現 。 其中最典型的實現是Scheme的版本 。 Clojure語言裏的core.logic也是受到miniKanren啓發 。 " Kanren " 這個詞來自於日語 “” ， 即 “ 關聯 ” 。