# Logic Night

Hosted By
Ben M.

## Details

Come learn how programming can be made even more declarative with logic programming. Don't miss this opportunity to learn from William Byrd!

6:00 - 6:30pm Introductions and dinner

We'll use this time to get to know each other and find out what interesting problems people are solving. Dinner will be provided. Please RSVP so we can arrange for the dinner.

http://photos1.meetupstatic.com/photos/event/3/b/d/a/600_354015322.jpeg

We believe that local entertainment is one of the richest ways to experience life and connect with our community. It’s a place where friends and memories are made. We help people discover what events they can attend in their local community via a vast growing network of 700+ media partners, partners including The City Weekly and the New York Daily News. At SpinGo, we have a deep emphasis on the functional programming paradigm, and work on a variety of problems, including big-data analytics (lambda architecture), and a content aggregation database using CQRS and Event Sourcing, providing merging and roll-back of various content sources.

Lightning Talks

TBD, if you have something you would like to share (in ~5 mins) please email me@benmabey.com.

Relational Programming in miniKanren by William Byrd

A gentle introduction to relational programming (also known as pure logic programming), using the miniKanren programming language. miniKanren is the subject of 'The Reasoned Schemer' (http://mitpress.mit.edu/books/reasoned-schemer) (MITPress, 2005), and the basis for David Nolen's popular Clojure library, core.logic.

Relational programming makes no distinction between a function's "input" and "output". For example, in relational programming we can write '3 + 4 = x'. Here, x is a logic variable that is associated with 7. We can also write '3 + x = 7'. In this case, x is associated with 4; the '+' relation can perform subtraction. More interestingly, we can write 'x + y = 7', which returns all pairs of integers x and y that sum to 7. We can even write 'x + y = z', to enumerate all triples of integers whose first two values sum to the third value.

The real fun begins when we write interpreters in a relational style, as we shall see!

The talk will be divided into two parts: a gentle introduction to logic programming and miniKanren, followed by a demonstration of more advanced uses of miniKanren, including automatic generation of programs from their logical specifications.