The Power of Prolog
Thank you very much for your interest, I greatly appreciate it!I hope you are all doing reasonably well. Please take care!This book was most recently discussed here in May 2018:https://news.ycombinator.com/item?id=17121028Since then, I have added a new chapter, Logical Foundations of Prolog:https://www.metalevel.at/prolog/logicAlso, I have made several other additions and improvements. You can
see most of the changes since the last discussion in a public git
repository:https://github.com/triska/the-power-of-prolog/compare/8a94ed...Currently, I am working on several videos that will eventually form
the core of the book. Here are a few previews:https://www.metalevel.at/prolog/videos/logichttps://www.metalevel.at/prolog/videos/timetablinghttps://www.metalevel.at/prolog/videos/sparrows_on_eaglesThese videos are all work in progress, and they may be replaced by
better versions at any time. Hence, if possible, please use the links
above to refer to them: They will always point to the latest versions.Alternatively, please use the following overview page that shows all videos:https://www.metalevel.at/prolog/videos/Also, I have published a comprehensive journal paper about my
CLP(B) system, i.e., a SAT solver with some nice algebraic
properties, seamlessly integrated into Prolog as a specialized form of
unification:https://www.metalevel.at/boolean.pdfFor Prolog application programmers and system implementors, the
paper's appendices may be especially interesting. They formalize a few
important concepts that are also a major theme in the book.As of October 2019, the CLP(B) system is also available in Mark Thom's
Scryer Prolog. Scryer is a Rust-based Prolog implementation that is
freely available, conforms to the Prolog ISO standard, represents
strings efficiently as lists of characters, and includes important
features for implementing Prolog-based constraint solvers:https://github.com/mthom/scryer-prologAs of a few days ago, Scryer Prolog also ships with my implementation
of CLP(ℤ), Constraint Logic Programming over integers. This is a very
useful declarative paradigm for solving combinatorial tasks, in some
ways superior to SAT solving because it allows more convenient
modeling, easier experimentation with different formulations, and
reasoning at a higher conceptual level. The chapter on declarative
integer arithmetic contains more information, and further pointers:https://www.metalevel.at/prolog/clpzFor illustration, here is an example page where you can solve timetabling instances with this approach:https://www.metalevel.at/prolog/timetabling/I welcome all comments and suggestions about the book, these videos,
and Prolog in general. Also, I would like to take this opportunity to
thank all readers for your thoughtful comments and endorsements. Your
feedback and encouragement are making this work especially worthwhile.Enjoy!