Functional Geekery Episode 9 – William E. Byrd

In this episode I talk with William Byrd. We talk about miniKanren and the differences between functional, logic and relational programming. We also cover the idea of thinking at higher levels of abstractions, and comparisons of relational programming to topics such as SQL, property testing, and code contracts.

Our Guest, William Byrd
@webyrd on Twitter and [email protected]


U Combinator Lab
Will’s overview of how he got into LISP and Relational Programming
Daniel Friedman and Indiana University
Logic Programming
Zebra Puzzle – Who owns the Zebra?
Oleg Kiselyov
The Reasoned Schemer
Purely Relational Arithmetic System
The Ability to Reorder Statements and Keep the Same Semantics
Functional vs Logic vs Relational
Interview of Will on InfoQ
How Far Can We Get Being Purely Declarative
Constraint Logic Programming
Bob Harpers’ Post on Static vs Dynamic Typing
Analogies Between Typing and Logic Programming
Dependent Type Systems, e.g. Agda and Idris
The Discovery of Functional Programming and Signs of Logic Programming
Functional JavaScript by Fogus – (Note: There was Episode with Fogus on Functional JavaScript)
Trying to Understand the Implementation of miniKanren to Understand Thinking Operationally
The ability to be able to let go of implementation details and think at a more abstract level
Pointers on Where to Dig Into Relational Programming – For all things miniKanren
Will’s Dissertation
Scheme Workshop Paper
Will is Working on a Book as Starting Place for Relational Programming
The Art of Prolog
Prolog Programming for Artificial Intelligence by Ivan Bratko
Thanks to Everyone Who Has Worked on miniKanren
Clojure/Conj and Strangeloop talks on miniKanren

A giant Thank You to David Belcher for the logo design.

7 replies on “Functional Geekery Episode 9 – William E. Byrd”

The characterization of declarative programming is not correct. There is a technical definition: a language is declarative if it can be viewed as a logic. That in turn depends on model theoretic semantics.

We did the backtracking arithmetic a while ago in IC-Prolog. It was a cool toy but pretty much useless in practice.

Fundamentally, we build computer systems to do things for us; not to contemplate navels. Action is of the essence. Logic programming punts on this.

The real pain point in LP languages has nothing to do with declarative issues: but instead has more to do with issues of scale (building large programs). This is one place where modern FP has made tremendous progress.

The existential quantifier is a useful heuristic; but does not get at the essence of what is means to have a declarative semantics.
And, ‘pure’ Haskell *does* have a declarative semantics – in terms of the individual values in the domain of interpretation.
So, in terms of programming languages, you have a declarative semantics if there is a clear notion of individual value and if there is a sound mapping from expressions in the language to those individuals.
Pragmatically, a declarative semantics is useful because it gives an ‘independent’ reading of the text of the program (i.e., the values computed by the program can be understood independently of the flow of computation).

Just one critic about the audio editing guys… Please make the levels more consistent between the voices… Here is like once voice is VERY loud, the other much quiet, I feel like I have to keep changing my volume depending on who is talking… please make that more even in future.

Thank you for the feedback. I will work to see if I can get that improved in future episodes. I want to let you know that I am learning all of this as I am going, so it may take a while and a bit of experimenting before I get it figured out.

Also, have you found this to be true across all episodes, or was it just this episode that was especially bad in your opinion?

Thanks again for letting me know.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.