Declaring Reality: An Introduction to Datalog
zef.me
zef.me
http://docs.datomic.com/query.html
http://blog.datomic.com/2015/01/datalog-enhancements.html
Nathan Marz's (of Twitter startup fame) Cascalog library (also implemented in Clojure) uses Datalog as its query engine to generate Hadoop jobs.
http://alexrobbins.github.io/cascalog-intro/#/step-14
http://clojure.com/blog/2012/02/03/functional-relational-pro...
Racket ships with #lang racklog a scheme based datalog like language: http://docs.racket-lang.org/datalog/index.html
Also Prolog like logic languages Parenlog http://docs.racket-lang.org/parenlog/index.html and the more fully fleshed out Racklog http://docs.racket-lang.org/racklog/index.html
The nice thing about the Racket versions is that installation is easy because the Racket ecosystem doesn't have external dependencies for the installer --- other than a supported operating system: Unix, Linux, OSX or Windows. https://download.racket-lang.org/
The downside of course is there's a gap between the traditional documentation for Datalog and the Racket syntax and perhaps consultants with technical expertise for running large scale implementations.
I wouldn't normally object to a misplaced comma on HN, but in this case it is potentially very confusing. This sentence as written says that Prolog is not Turing complete, but actually it is; it's Datalog that is not Turing-complete. (I'm sure that was the intent.)
Datalog has well defined semantics and can actually be formalised through different means, which are proven to be equivalent.
* Model theoretic (logical)
* Fixpoint (imperative)
* Proof theoretic (functional)
- minikanren
- constraint logic prog
- constraint solving
- inductive logic
?
From personal experience, if you're used to programming in a logic programming language, trying CLP out is like being in declarative heaven. Swi Prolog, as I think all the full Prolog implementations, has a few CLP libraries, frex see:
http://www.swi-prolog.org/pldoc/man?section=summary-lib-clp-...
Minikanren is a relational language that's introduced in the Reasoned Schemer as an example of a relational language. I don't think it's fully a logic programming language (ie, no theorem proving) but I might be wrong. Check out the book for more.
Inductive Logic Programming is a machine learning technique for learning Prolog programs from data. More to the point, you declare knowledge about the world as positive and negative examples given as Prolog unit clauses (facts). An inductive Logic Programming algorithm then will learn a full Prolog program for you, including definite clauses (rules).
A typical example of ILP is FOIL by Quinlan (the Decision Trees guy) [http://www.rulequest.com/Personal/].
ILP is closely er, related to Relational Learning a.k.a. Statistical and Relational Learning and a number of probabilistic logic programming languages like Problog (no typo).
You can find a lot of information about ILP in the textbook Logical and Relational Learning by Luc de Raedt [http://www.springer.com/us/book/9783540200406], which I recommend (not related to the author) (but I am a logic programming looney so).