[HN Gopher] The Power of Prolog
       ___________________________________________________________________
        
       The Power of Prolog
        
       Author : jsfcoding
       Score  : 180 points
       Date   : 2022-06-06 14:34 UTC (8 hours ago)
        
 (HTM) web link (www.metalevel.at)
 (TXT) w3m dump (www.metalevel.at)
        
       | at_a_remove wrote:
       | I have only had passing experience with Prolog, many moons ago.
       | It feels like ... and this is hard to express without sounding
       | like I am trivializing it ... it feels like Prolog has a pretty
       | good future as domain-specific language as input to a library
       | called by, well, other programming languages, but on its own,
       | it's a "wow, that's neat" kind of language.
        
         | trenchgun wrote:
         | something like this?https://github.com/yuce/pyswip
        
       | baq wrote:
       | What prolog needs is an integration story.
       | 
       | How can I embed a prolog program in a python long running API
       | server? Same but in Go? JVM?
        
         | sprior wrote:
         | I dusted off an implementation of MQTT for SWI-Prolog so the
         | way I did all the integration was via MQTT messages between
         | Java. Python, c/c++ (on Arduino devices), and Prolog.
         | 
         | These days SWI-Prolog even has a library for Redis.
        
         | trenchgun wrote:
         | heres python integration https://github.com/yuce/pyswip
        
       | Jtsummers wrote:
       | Several past discussions:
       | 
       | https://news.ycombinator.com/item?id=22804079 - April 8, 2020 (82
       | comments)
       | 
       | https://news.ycombinator.com/item?id=17121028 - May 21, 2018 (158
       | comments)
       | 
       | https://news.ycombinator.com/item?id=14045987 - April 5, 2017
       | (161 comments)
        
       | tbensky wrote:
       | I've been using Prolog on and off for 20+ years (I actually
       | bought and used Turbo Prolog by Borland under MS-DOS). I have to
       | confess though, I've never quite understood Prolog or what it's
       | for. I've followed Markus Triska and his Power of Prolog videos
       | (watched all of them). I'd like to thank him for his work. This
       | fellow is super smart about programming, and he appears to be
       | singlehandedly re-inventing Prolog. His videos are of the highest
       | quality content. I've learned so much from his work, particularly
       | in the area of CLP. I've now come to understand Prolog as a
       | search language, and he's convinced me that CLP+Prolog are the
       | next generation of Prolog as compelling tool. (I do a bunch of
       | work in personnel scheduling/optimization and have mostly used
       | genetic algorithms to this point. I'm seeing more and more uses
       | of Prolog in this area thanks to Mr. Triska.)
        
       | cl42 wrote:
       | Does anyone know if Prolog has been used in video games? I keep
       | wondering if complex histories like those in Dwarf Fortress are
       | coded via a Prolog-like approach to keep them consistent and
       | correct.
        
       | zimpenfish wrote:
       | I've been using it to try and figure out the longest consecutive
       | bus route journey in London (648-649-651, disappointingly short)
       | and some other bus related shenanigans - all of this was much
       | easier than using pretty much anything else.
       | 
       | But on the other hand, it can be _really_ faffy to figure out why
       | your recursive list printer is failing halfway through and
       | restarting three items back...
        
         | mark_l_watson wrote:
         | This looks like a nice book. I just read the CLP section, which
         | may do what you want.
        
       | legerdemain wrote:
       | This month Prolog is ranked #21 on TIOBE, ahead of Rust (#28) and
       | TypeScript (#43). This probably demonstrates the irrelevance of
       | TIOBE more than it illustrates the relevance of Prolog.
       | 
       | I think people who don't need to use Prolog think of Prolog in a
       | very idealized way, kind of how they think of other "principled"
       | languages like Lisp or Rust. Many years ago, I took a course at
       | Johns Hopkins called Computational Models of Cognition. It was
       | taught partly in SWI-Prolog. We used Prolog as a simple DSL to
       | write little logical programs. It was different, and fun, and
       | kind of confusing.
       | 
       | But as soon as you want to take Prolog beyond elementary
       | classroom use, you will find that it is a language like many
       | others, and needs to expose a world of little QOL details that go
       | beyond the elegant simplicity of term unification, like argument
       | mode modifiers and continuations and such.
        
       | naugtur wrote:
       | I'm not an enthusiast of real world applications of prolog, I saw
       | a prolog project fail and get rewritten in Cpp
       | 
       | But! I'm forever grateful for the things learning prolog did to
       | my brain
        
       | warning26 wrote:
       | Prolog always seemed to me like a database query language that
       | can be tricked into computation.
        
         | sgt101 wrote:
         | A bit like SQL?
         | 
         | The interesting thing is that 1000000000's of people use SQL
         | every day and not so many Prolog....
        
       | bmitc wrote:
       | Prolog is the only language that I've ever learned that feels
       | like magic. Of course, it's not, but it feels like that. I'm
       | still learning it, but I feel it and the logic paradigm are
       | underused. I wonder if it's fair to consider it constraint-based
       | programming rather than just logic programming. I used the book
       | _Thinking as Computation_ to learn it (and still am), and that 's
       | what it felt like we were doing in the book: just setting up
       | constraints for the program to run through and find matches for
       | the constraints.
        
         | dorian-graph wrote:
         | What scenarios have you used it for?
        
           | bmitc wrote:
           | I have not used it for anything outside of learning, yet. I
           | highly recommend the book _Thinking as Computation_. It 's a
           | really excellent introduction to both Prolog and the subject
           | of the title. It presents Prolog solutions to many topics.
           | For example, there's some game solvers, and the Prolog
           | programs basically consist of writing down the rules of the
           | game.
           | 
           | I do have some ideas for some apps I'd like to tackle at some
           | point. Those primarily consist of interacting with system
           | constraints.
        
           | quadcore wrote:
           | After some time using it you understand it works for
           | everything. Essentially, it features simpler and powerful
           | loops and recursions. So you wrote those differently and end
           | up writing many things differently.
           | 
           | That said, I used it for a simple game AI at university. My
           | AI was the best of the class and it was something like 30
           | LOC. I remember thinking I would have spend 5x more time
           | writing the same thing in C instead of 1 hour (plus some
           | tests and play session)
        
         | qsort wrote:
         | It's _criminally underused_ , and it's a weird blind spot for
         | software developers to have. My input on this is that our
         | primary working tool, a programming language, is so powerful
         | and wide that (within the limits of computability) it can
         | literally do anything; therefore we are less likely to question
         | the paradigm or look for a different one, even when it would be
         | more suited to the problem at hand.
        
           | paulmd wrote:
           | indeed, a LOT of problems boil down to satifiability problems
           | that are _super_ easily expressed in PROLOG. I was recently
           | musing about some of the problems with  "automated" ffmpeg
           | processing of obscure files (things like realvideo, etc),
           | because there are a lot of edge cases in terms of filters
           | that can't work on X color space or whatever, and the obvious
           | solution that presented itself was a prolog rules/knowledge
           | base that "understands" the conversion process and finds
           | appropriate filters to put together a chain between some
           | arbitrary input and output tuples.
        
           | sidkshatriya wrote:
           | Prolog is a deep language and can teach so you a lot. The
           | main problem is that any prolog program bigger than, say, a
           | thousand lines of code become difficult to debug and
           | understand. There are ways to make things better e.g. avoid
           | impure prolog etc. but it is still problematic.
           | 
           | Engineers are always looking for technologies to hop onto.
           | Prolog is niche for a reason: I don't think Prolog scales. In
           | some ways it is too flexible and powerful.
        
             | trenchgun wrote:
             | >The main problem is that any prolog program bigger than,
             | say, a thousand lines of code become difficult to debug and
             | understand.
             | 
             | Sounds like there is a use case for abstraction? Category
             | theory maybe?
        
             | marcosdumay wrote:
             | On the other hand, with dozens of lines of Prolog you can
             | solve some problems that would take many thousands of lines
             | in other languages (and a lot of calm study before you can
             | map them into a real logic or imperative algorithm).
             | 
             | I still avoid it, because yeah, once you solve that problem
             | and avoid those thousands of lines, you are stuck. If you
             | try make the rest of your system in Prolog, it will become
             | a non-viable mess before you even finish it.
             | 
             | That said, I think the main thing that Prolog is missing is
             | easy integration with other languages. If I could define
             | some environment in Haskell, pack it with some Prolog
             | predicate and get a list back, I would use it all the time.
        
               | CodeSgt wrote:
               | I'm not familiar with Prolog and this statement sounds
               | insane. I'm not doubting you exactly, it's just not
               | something I can concieve. Can you provide an example of a
               | problem that would only take a few dozen lines of Prolog
               | which would take several thousand lines in another,
               | "normal", language?
        
               | prerok wrote:
               | It's been more than a decade since I worked in Prolog, so
               | I cannot give you a direct example but can try to answer
               | :)
               | 
               | Basically, Prolog is declarative programming. You can
               | attach properties to your data and then define relations
               | between the data based on whether they have that property
               | (or not). Something along the lines of: X is grandfather
               | of Y if X is man and X has child Z which has child Y.
               | 
               | The above statement is very simple to write, a couple of
               | lines. This will perform depth first search (or breadth
               | first with some longer algirithm) using your data. As a
               | result, Prolog can provide all such matches of all your
               | data, or just the grandchildren of X, or both
               | grandfathers of Y, etc.
               | 
               | Anyway, what you are really getting is just a good
               | implementation of the search through the relations based
               | on constraints. The main reason Prolog is used is because
               | other languages just don't provide a good library for
               | constraint based search through your data.
        
               | v-erne wrote:
               | So You are saying that there is really not much
               | difference between prolog and lets say constraint solver
               | written in Java (DSL on top of another language)? Because
               | if this really true than now I understand why this
               | language never caught on.
        
               | infogulch wrote:
               | There was a functional JVM language with built-in datalog
               | that came through the other day. Datalog brings a lot of
               | the value of pure prolog.
        
               | robinsonrc wrote:
               | https://flix.dev/
        
             | kitd wrote:
             | Are there any Prolog scripting engines or embeddable
             | runtimes? It feels like the kind of thing where you might
             | use it to solve a small part of your problem domain and
             | leave the rest to a conventional language.
        
               | ashton314 wrote:
               | May I interest you in microKanren? You can just roll your
               | own. Here's a shameless self-plug for a close reading I
               | did of the paper that introduces microKanren:
               | https://github.com/ashton314/muKanren_reading
        
               | Avshalom wrote:
               | Off the top of my head:
               | 
               | Javascript: http://tau-prolog.org/
               | 
               | Java: https://apice.unibo.it/xwiki/bin/view/Tuprolog/
               | (also SWI, Ciao and Sicstus have Java bridges)
               | 
               | Go: https://github.com/ichiban/prolog
               | 
               | Common Lisp: https://www.cliki.net/Prolog
               | 
               | Racket: https://docs.racket-lang.org/racklog/
               | 
               | Guile: https://gitlab.com/gule-log/guile-log
               | 
               | Erlang: https://github.com/rvirding/erlog
               | 
               | Also SWI and Ciao have a pretty straight forward FFI for
               | C.
        
               | Avshalom wrote:
               | Oh nice, looks like Tau just put out a new point release
               | last week
               | 
               | https://github.com/tau-prolog/tau-
               | prolog/blob/master/RELEASE...
               | 
               | this looks handy https://github.com/tau-prolog/tau-
               | prolog/issues/295
        
               | miltondts wrote:
               | Not exactly Prolog, but there is miniKanren. You can
               | check a list of implementations here:
               | http://minikanren.org/#implementations
        
               | QuinnWilton wrote:
               | To an extent, you get this with Datalog, which is an
               | easily embeddable subset of pure Prolog.
               | 
               | I've been spending a ton of time with the language and
               | its implementation through my day job, and I recently
               | spoke about its use as a DSL for embedded knowledge
               | bases: https://www.youtube.com/watch?v=lYLkaOq7WbU
        
             | agumonkey wrote:
             | I guess Erlang is the scalable Prolog in a way. Tiny blocks
             | of logic, respawn.
        
         | QuinnWilton wrote:
         | > I wonder if it's fair to consider it constraint-based
         | programming rather than just logic programming
         | 
         | Prolog III is considered the origin of constraint logic
         | programming: http://www.prolog-heritage.org/en/ph30.html
        
       | [deleted]
        
       | chrismaeda wrote:
       | Prolog is cool but has exponential complexity which makes it
       | impractical for real world use.
       | 
       | The rete algorithm was supposed to be a solution but has anyone
       | applied rete to a prolog implementation yet?
        
         | aarroyoc wrote:
         | Isn't RETE a forward-chaining algorithm while Prolog is a
         | backward-chaining language? I'm not sure you could use RETE for
         | the actual Prolog semantics. Currently, fast implementations of
         | Prolog use a virtual machine, the most popular is WAM, that can
         | be compiled then to machine code (GNU Prolog does it). Also
         | some implementations have JIT indexing, which improves
         | performance too.
        
       | tannhaeuser wrote:
       | Prolog is used A LOT behind the scene for discrete optimization
       | in logistics, finance, and more. See [1] for an introduction
       | going from no prior knowledge to overcoming issues with assertz
       | and co.
       | 
       | [1]: https://quantumprolog.sgml.io
        
       | aarroyoc wrote:
       | This is one of the best resources for learning modern Prolog. It
       | mainly uses Scryer Prolog, which is a still-in-progress open
       | source Prolog system, but very promising and adheres to the ISO
       | standard.
        
       ___________________________________________________________________
       (page generated 2022-06-06 23:00 UTC)