[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)