What is miniKanren?

miniKanren is an embedded Domain Specific Language for logic programming.

The core miniKanren language is very simple, with only three logical operators and one interface operator.
The core language, using Scheme as the host language, is described in this short, interactive tutorial.

miniKanren has been implemented in a growing number of host languages, including Scheme, Racket, Clojure, Haskell, Python, JavaScript, Scala, Ruby, OCaml, and PHP, among many other languages.

miniKanren is designed to be easily modified and extended; extensions include Constraint Logic Programming,
probabilistic logic programming, nominal logic programming, and tabling.

A detailed discussion of the differences between miniKanren and Prolog can be found here.

The Book

miniKanren Online Uncourse (via Hangouts on Air)

Will Byrd organizes a weekly miniKanren uncourse, which meets Sundays at noon Pacific/3pm Eastern time. We show off miniKanren projects, talk about miniKanren implementation, and do live coding/live research. A link to each week's hangout is posted to the miniKanren uncourse mailing list.

Coen De Roover

Weekly Google Hangout on Air

Upcoming Hangouts

Previous Hangouts

Hangout #13, Sunday, June 30.
Topic: Claire shows off a new macro for defining constraints using attributed variables, a new version of the matche pattern matching macro, and the implementation of templateo (declarative copy_term) (URL). Norman demos his code for solving nonogrids problems. Will talks about CPSing miniKanren programs.

Hangout #11, Sunday, June 9, 2013.
Topic: Unexpected memory usage in conde, and how to fix it in CLP(FD); meta-interpreters in miniKanren (code); what do you need to know to use miniKanren effectively?; Will's new book on miniKanren (in progress).

Hangout #8, Sunday, May 5, 2013.
Topic: Dan and Jason show off a cool way to implement mutual recursion in an interpreter. Will and the gang then live-code a relational interpreter for general Deterministic Finite Automata (code).