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