Two more very good Prolog books: The Power of Prolog[1] and Simply Logical: Intelligent Reasoning by Example[2]. I also recommend visiting the Awesome Prolog list[3]. There is also a very interesting extension of the Prolog - Probabilistic Prolog, aka ProbLog[4]. And modern ISO-compatible implementation in Rust language - Scryer Prolog[5].
I took a break from working on it over the summer, and am about to start again. If anyone would like to pay me to work on it full time, do let me know.
You know how when someone quits smoking and then, sometimes, they start to go around telling everyone else how great it is and how OMG! they should quit smoking too, and generally being a kind of smug and annoying about it?
I had a kind of Prolog "conversion" experience last summer...
You guys! Prolog is so great! OMG! You should really try it! I'm seriously you guys.
In all seriousness, Prolog is a simple, powerful, elegant language, with a rich history replete with amazing research and tools. "An elegant weapon... for a more civilized age."
I really want to build a thing or two with it, but my problem is that I’m too impatient to actually learn it first.
I imagine you could build a pretty effective scheduling/booking system with it, for example, and without knowing better I would think that it’s less complicated than what you have to do to build that kind of thing imperatively.
At the same time, I like declarative code and it makes me think of SQL. I’m pretty glad I picked that up before ORMs gave people a reason not to learn it. I would likely have that same impatience to learn SQL now, had I not.
I wrote some Prolog 25 years ago in school. As I recall we did a bunch of pattern matching stuff with it and at the time it never made much of an impression on me. I had similar experiences with CAML, SML, and COBOL.
Scheme, C, and Pascal were the languages that clicked and had me writing stuff just for fun.
What was it about Prolog that turned you into a fan?
I was exposed to Prolog about 20 years ago. A friend of mine tried to teach it to me but it didn't "click". Looking back, I'm totally puzzled by that, I cannot explain why.
Second, I had just written a type-inferencer for a stack-based language called Joy[1], and had kind of realized that what I was doing whas Prolog-shaped. So I re-implemented the interpreter and inferencer both in Prolog and discovered that they were the same code. (So I deleted one copy.) https://hg.sr.ht/~sforman/Thun/browse/default/thun/thun.pl#L...
Joy-in-Prolog is ridiculously elegant. It's almost perverse.
Then, third, "Logic Programming and Compiler Writing" by David Warren went by here on HN, almost exactly a year ago https://news.ycombinator.com/item?id=17674859 (It's a 404 now but you can find it elsewhere.) I found out that there's a wealth of research to draw on, and that it's really easy to make compilers and other tools in Prolog.
It's so easy that, if you have to write a compiler from scratch it would be faster to learn Prolog and then use it to write your compiler than to (learn to) write a compiler in an imperative language you already knew!
Taken all together, I realized that something like half of my professional career was wasted simply due to ignoring Prolog for twenty years, and that everything I want to do going forward is both faster and easier in Prolog. (I have embedded Joy in it and can compile it...)
About Warren's article. I just returned it back, sorry for the inconvenience :) By the way, you may find basically the same description of the compiler in The Art of Prolog book.
It's funny, I picked up a copy of The Art of Prolog for a dollar at a library sale a couple of years earlier, and had even skimmed the ToC, but somehow the penny dropped only when I saw that paper. D'oh!
Working in a prolog first startup, this 'conversion' seems to be a regular enough experience. New core engineering recruits take a while, but then become evangelists!
Prolog-first startup, eh? Lucky duck! Are you hiring? I already know Prolog...
Like I said above the thing that puzzles me is why I didn't grok Prolog twenty years ago when my friend was spoon-feeding it to me so patiently. I had to bang my head against the wall right up to the very last minute, when I had pretty much implemented a crude unification program.
I've had this experience earlier this year. It's great, and I too mention it when I can. For me, it's often a nicer alternative in cases I might otherwise consider SQL in some way. My only complaint is aggregate functions are harder to use.
I love the idea of prolog, but I'm stumped when I try to imagine integrating it into other web-based projects. Is there a way? Like for instance having a regular javascript frontend, and a JVM based backend like with spring or play, integrating logic programming and prolog somehow?
Or more generally, now that you know prolog, what kind of real-life things do you find it useful for? I mean I've seen all the tutorials of it solving sudoku and logic puzzles, but...
> Tau Prolog is a Prolog interpreter fully implemented in JavaScript. While most online interpreters are remote servers with an installed version of the interpreter which receive code, execute it and return the results, Tau Prolog is fully implemented on JavaScript and the code is analysed and parsed on the client side.
> Tau Prolog is not just an implementation of the logic programming resolution mechanism, but a complete Prolog interpreter. Furthermore, the implementation of this interpreter has been directed by the ISO Prolog Standard.
As for what I find it useful for, see the sibling comment for details.
This is a very good book for a first timer. This is one of the first books I read when learning Prolog. It's fun since you're building a game. Just work through it from front to cover and you will begin to get a good grasp on the language.
This is an awesome book. I had no idea it was free when I bought it lol. It is also the only book that made Prolog seem pretty simple and not super confusing.
I just wish I had the kinds of problems where Prolog would be performant enough.
> We describe a program, PRESS, (PRolog Equation Solving System) for solving symbolic, transcendental, non-differential equations in one or more variables. PRESS solves autonomously, i.e. without guidance from the user. The methods used for solving equations are described, together with the service facilities. The principal technique, metal-level inference, appears to be relevant to the broader field of symbolic and algebraic manipulation.
I just read your "TerminusDB — what’s in a name?" blog post, love it! The tie-in to Asimov's Foundation, you folks seem pretty serious about that, yes?
- - - -
You're releasing TerminusDB under the GPL! Bless your hearts! I can't wait to see it!
Thanks! We're very serious about the link to Asimov's foundation. We're huge fans and our work on the global history databank was, in part, inspired by psychohistory (https://en.wikipedia.org/wiki/Cliodynamics).
-------
Haven't seen CQL - must take a look and share with Terminus team member ('terminator' naturally!) who wrote our query language, WOQL (web object query language). Prolog as the basis for a query language is v powerful. We get: queries returning graphs, recursion as a core feature, composable sub-queries and irregular expressions & cycles.
There is a standardization push in graph query at the moment so I have all this stuff in the front of my mind! Trying to write a 'graph query manifesto' at the moment.
----------
On earlier comment - we are absolutely hiring, especially folks interested in prolog!
> We're very serious about the link to Asimov's foundation.
Excellent! I've heard that Behavioral Economics is also inspired by psychohistory.
If you're also looking to the future you might want to get in touch with the Long Now Foundation.
In re: CQL the underlying CT treatment of DBs is the "secret sauce". I haven't investigated WOQL in depth yet (I looked at the source in https://github.com/terminusdb/terminusdb) but I agree with you that Prolog is superlative for a query language.
I was joking about hiring, but if you put some issues in github it's not inconceivable you might get a PR someday. I don't want to make any promises.
As I mentioned above, I'm working on Joy-in-Prolog, and I'm right at the point where I'm thinking about how to represent data (as in DBs) using Category Theory along with the standard meta-data in "Data Model Patterns: A Metadata Map" by David C. Hay.
The first product I worked on after university was the theorem probing toolkit for the SPARK Ada statically analysable language. This is used to prove the absence of runtime exceptions.
I really enjoy using Prolog, but the number of cases where I would choose to use it is pretty limited.
Not even comparable. The OP posted a book, but you posted is a guide of no more than 30 pages.
Novice:
Adventure in Prolog
Learn Prolog Now
Logic Programming with Prolog
Med - Advanced:
Clause and Effect
The Art of Prolog
The Craft of Prolog
Wam Book
The Practice of Prolog
Prolog Programming for AI - Brakto
Deep Dive:
Expert Systems in Prolog
Natural Language Processing for Prolog Programmers
Intelligent Image Processing in Prolog
Representing Knowledge In Prolog
There are hundreds of books! The real gems are to be found in papers, look into published papers, you will find amazing topics on Meta Programming, Machine Learning, Compiler Construction, DCG, etc. Don't discount books by age, even if they were published in the 80s! The best books are from the 80's-90's.
[1] https://github.com/triska/the-power-of-prolog/
[2] https://book.simply-logical.space/
[3] https://github.com/klaussinani/awesome-prolog
[4] https://github.com/ML-KULeuven/problog
[5] https://github.com/mthom/scryer-prolog