3 ms·
Isn't Prolog the better language for this? Don't get me wrong I love clojure, and one of the best things about dialects of lisp is that they are pretty much alw
by hardwaresofton 10y ago
Isn't Prolog the better language for this? Don't get me wrong I love clojure, and one of the best things about dialects of lisp is that they are pretty much always multi-paradigm, but...
Pretty sure this is exactly what you would use Prolog for.
- nickik 10y agoIts much harder to integrate a new language rather then using a language idiomatic rule engine. Defining everything in Clojure datastructures is a huge asset. Additionally its easy to use Clojure/Java language constructs in combination with the rule engine. In core.logic you can replace the unification alogorithms because its defined abstractly. I don't think this is as easy to do in Prolog.
- eroiusghs 10y agoLisp syntax is so flexible you can pretty much do anything in it - it's nice to get great editor features like REPL integration, Paredit, aggressive-indent-mode etc also when you are specifying your logic. I'm happy to use it :)
- nl 10y agoDatalog[1] is a subset of Prolog. Implementing it in Clojure gives you access to the JVM's libraries. [1] https://en.wikipedia.org/wiki/Datalog https://en.wikipedia.org/wiki/Datalog
- tannhaeuser 10y agoExactly. While Datalog is a subset of Prolog, Datomic isn't Datalog. From their tutorial: [:db/add "foo" :db/ident :green] This isn't Prolog syntax at all. Prolog would be assert("foo", ident, green) Franz, Inc. does it as well - calling something Prolog for their Lisp product which it just isn't. I've nothing against Clojure but I wish the functional programming fans wouldn't call their DSLs Prolog or Datalog. If you're using Prolog or Datalog, you're expecting it to be (reasonably) portable accross Prologs, which this isn't at all.
- nl 10y agoWhere are you seeing that it uses Datomic? The linked page says: Datalog based rules engine and The language being implemented is called "Pabu" and it strongly resembles Prolog. There doesn't seem to be much documentation for this, but the examples look like this: sibling(fred, barney). parent(fred, mary). sibling(mary, george). gender(george, male). /* Using the OWL namespace to describe the sibling property */ owl:SymmetricProperty(sibling). See [1] It's been a while since I did Prolog, but that looks pretty familiar (and like your example) [1] https://github.com/threatgrid/naga/blob/master/pabu/family-2nd-ord.lg https://github.com/threatgrid/naga/blob/master/pabu/family-2...
- tannhaeuser 10y agoYou're right. I was referring to Datomic because it was linked to from https://github.com/quoll https://github.com/quoll. Mind you, Prolog (ISO/IEC 13211-1) has very specific requirements with respect to exceptions, arithmetic, operator-precedence parsing and resolution/negation-as-failure/extra-logical features, which I see often glossed over when people call something Prolog in a roundabout way.
- nl 10y agoHence why they claim to be Datalog.
- lispm 10y ago'Prolog' in Lisp exits for decades. During the 80s several Prolog implementation had been developed for research systems and also for commercial systems. Many used an s-expression syntax for Prolog, but some could also read 'Edinburgh' syntax. Most of the time these 'Prolog' implementations are not as powerful/complete like a typical modern Prolog implementation. LispWorks for example has an expert system development extension with an integrated Prolog. http://www.lispworks.com/documentation/lw70/KW-M/html/kwprolog-m.htm http://www.lispworks.com/documentation/lw70/KW-M/html/kwprol... It also offers to read Edinburgh syntax and also has a command line interface for this syntax. http://www.lispworks.com/documentation/lw70/KW-M/html/kwprolog-m-135.htm#pgfId-869241 http://www.lispworks.com/documentation/lw70/KW-M/html/kwprol... But it still is far from ISO Prolog compatible.
- quoll71 10y agoProlog can't scale over large data sets. That's why Datalog was invented. So Prolog has significantly greater capabilities, but Datalog scales better. Your use case determines which one is more appropriate for you.
- dkersten 10y agoMy problem with Prolog is that its a useful paradigm for a subset of any program, but not for the entire thing. I really like Clojure's core.logic approach: use core.logic (which works like prolog) for the bits where it makes sense and use Clojure for the bits where it doesn't. That is, the right tool for the job.