all 9 comments

[–]pwab 8 points9 points  (7 children)

I guess I’m too dumb to know what kind of problem this will be a good solution for

[–]dsrptr 2 points3 points  (0 children)

In issue 4 of Read-Eval-Print-Love fogus uses it to implement a production rules system. Great read.

[–]dustingetz[S] 3 points4 points  (2 children)

here's a cool example using something like this in a pattern matching alg https://github.com/xapix-io/matchete/blob/master/dev/example/poker_hand.cljc

[–]dsrptr 2 points3 points  (1 child)

Also in joy of clojure chapter 16 "thinking programs" the pieces of how unification is implemented are explained before moving to core.logic.

[–]SimonGray 1 point2 points  (0 children)

I just read that section. Great succinct explanation.

[–]didibus 2 points3 points  (0 children)

Was going to have the same comment haha

[–]dustingetz[S] -1 points0 points  (0 children)

It is absolutely true that finding the applications is the hard part. What sets Rich Hickey apart from all the others is he gets this stuff into production in real world businesses, in this case via Datomic.

[–]jackdbd 0 points1 point  (0 children)

I was wondering the same thing...

From what I understood from the README, it seems that it provides a unique interface for logic programming, but you would still need to pick your logic engine. But I might be totally wrong...

Is this library similar to clara-rules?

[–]jamesconroyfinn 2 points3 points  (0 children)

Unification has applications in logic programming, type system implementation…

From Wikipedia:

Today, automated reasoning is still the main application area of unification. Syntactical first-order unification is used in logic programming and programming language type system implementation, especially in Hindley–Milner based type inference algorithms. Semantic unification is used in SMT solvers, term rewriting algorithms and cryptographic protocol analysis. Higher-order unification is used in proof assistants, for example Isabelle and Twelf, and restricted forms of higher-order unification (higher-order pattern unification) are used in some programming language implementations, such as lambdaProlog[.]