A unified approach to solving seven programming problems

A fun pearl by William E. Byrd, Michael Ballantyne, Gregory Rosenblatt, and Matthew Might from ICFP: seven programming challenges solved (easily!) using a relational interpreter. One challenge, for example, is to find quines. Another is to find programs that produce different results with lexical vs. dynamic scope.

The interpreter is implemented in miniKanren (of course), inside Racket (of course).

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

It would be interesting to

It would be interesting to see how (if?) this approach breaks down in Prolog.

Interactive examples

Hi, I'm one of the authors.

There's an artifact to go along with the paper, which you can use to follow along with the examples as you read.

Nada Amin has also set up an interactive version of the paper, to make following along even easier.

Thanks. The interactive

Thanks. The interactive version is fun.

Videos for related talks

Spoiler alert: if you would like to go through the paper and figure out how you would approach these problems on your own, before seeing our solution, do so before watching these videos, or you'll ruin the surprise.

The ICFP talk (starting at about the 1hr 11min mark) for this paper is only about 20 minutes long, accessible, and contains plenty of demos.

At the end of the talk, there's a short teaser demo of an IDE we've been working on that incorporates the techniques from the paper. If you'd like to see more of what it can do, a more comprehensive demo of this IDE was given at Clojure/conj 2016.