11 ms·
The Power of Prolog
- xlii 3y agoProlog is awesome and I recommend learning it if only for kicks and experiencing foreign programming paradigm. Many concepts are expressed in a completely different and (when paradigm "kicks in") are arguably much simpler. E.g. in Prolog you don't usually operate on collection but instead provide information what the collection item actually is and then let the implementation figure it out. Drawing dependency tree is an effect of 3 rules: what is an entity, how to figure out that entity X and Y have relation, how to represent it. I have 2 gripes with it, though. One is that it's difficult and thus it's hard to convince people to learn/use it. Second - I didn't yet found way to seamlessly integrate it into other apps (I know that FFI is an option, but it doesn't convince me as production ready). For the last couple months I've been looking for some more "production" Prolog alternatives but what I found so far (LispWorks, Franz Allegro CL) costs a kidney and is not integration friendly. If anyone has success integrating Prolog in modern software please share, I'm really curious. I'm also looking for some GUI solutions in it as XPCE doesn't work on Mac :( Oh, and check out the Swish for online notebook: https://swish.swi-prolog.org https://swish.swi-prolog.org
- pipo234 3y agoI've worked a couple of years developing supply chain optimization software in C++ using ILOG constraint propagation software (Solver, now owned by IBM). At the time we considered BinProlog. It had built range propagation, compiled to native x86 and had descent FFI interop. Nevertheless seems to have been abandoned in favour of SWI prolog and GNU toolchain. Not sure about GUIs; I would consider that a very different expertise. We used our own canvas C++ rendering engine and some horrible integrated 4GL devtool call "4D", or "Fourth Dimension". https://www.tomshw.it/data/images/2/0/4/3/infor-advanced-scheduling-19643f201a247ba8ee38058f679d40a5d.jpg https://www.tomshw.it/data/images/2/0/4/3/infor-advanced-sch...
- zelos 3y agoI spent a year while failing to get a PhD in process scheduling writing all the constraints in Prolog, before the university got an ILOG license and I realised how much time I'd wasted.
- alex_lav 3y ago> Prolog is awesome and I recommend learning it if only for kicks and experiencing foreign programming paradigm. Many concepts are expressed in a completely different and (when paradigm "kicks in") are arguably much simpler. Seconded. Probably the biggest mind-explosion type experience as a programmer in my entire life. Even something simple like building a Sudoku solver is insanely fun IMO.
- bmitc 3y agoI agree. Prolog was the only time I've been very much mindblown when learning programming languages. Erlang/Elixir is a close follow-up, but that was more of the seamless nature of it all and not really the ideas like Prolog.
- bmitc 3y agoYou may be interested in Shen. It has this KLambda kernel language that can be implemented by a host platform, which then gives you the entire Shen language that includes a Prolog. I recently learned about this.
- bjackman 3y ago> If anyone has success integrating Prolog in modern software please share, I'm really curious. Not sure if these count but: - Gerrit's submit predicates are configured in Prolog. (Edit: deprecated!) - An internal product I worked with at Google is built around a Datalog knowledge base that gets codegen'd. Then you can query it directly or use a UI to generate queries. Both of these seem to work nicely but they're pretty limited use cases. My experience with Prolog at university was that it was pretty fun but there's just no way I would wanna use it for anything that isn't inherently Prolog-shaped. As soon as we were implementing nontrivial stuff in it the abstraction leaked like a sieve and you felt mostly like you were hacking against the backtracking algorithm rather than taking any actual advantage of the language.
- xlii 3y agoYeah, Gerrit predicates being deprecated are (in my opinion) sign how hard it is to convince people to use Prolog. If people maintaining Gerrit cannot use it (and probably there was push at Google too), then how to convince The Median Dev...?
- hanwenn 3y agoNot sure what "push at Google" means. For full context: the idea to use Prolog came from the project founder. In retrospect, it was a terrible idea, because almost nobody knows or likes Prolog, and that includes the SWEs at Google both on my team, and the ones configuring Gerrit. (I run the team that works on Gerrit at Google.)
- ahefner 3y agoI understand in practice that "nobody knows or likes Prolog" is a valid criticism, but was it a sound idea technically?
- bbor 3y agoI'd say "we don't have the human resources to support the development of this system in the long term" to be a pretty valid technical reason. Remember that we're engineers, not scientists -- the goal is efficacy
- OrangeRange 3y agoWhen working in Java a couple of years ago I once ran into a random Prolog error. Turns out that the XML parser used by a large subset of the Java world is written in Prolog (Hint: the error came from an Apache lib, just like in this link: https://stackoverflow.com/questions/3030903/content-is-not-allowed-in-prolog-when-parsing-perfectly-valid-xml-on-gae https://stackoverflow.com/questions/3030903/content-is-not-a...)
- tannhaeuser 3y agoNope, that's a misunderstanding on your part I'm afraid. The "prolog" in that error message/SO question refers to an XML prolog, which is the part in an SGML/XML document up to the first content element ie. an XML declaration and a DTD, both optional.
- jodrellblank 3y agoThat's https://www.merriam-webster.com/dictionary/prologue https://www.merriam-webster.com/dictionary/prologue - "the preface or introduction to a literary work".
- hooby 3y agoI had to do a little bit of Prolog back in University, decades ago, and it broke my head. I managed to actually solve all the programming tasks we were given (and as I was the only one to do so among my peers, many copied my solutions) - but if anyone then asked me to explain how I did it, I was at a loss. I basically stared at the screen until some sort of intuition hit, and if that didn't work, repeat the process until it does... I guess the paradigm never really "kicked in" for me ;)
- xlii 3y agoCan I suggest adding it to a "when I'm REALLY bored" list? ;-) It took me years for Prolog to kick in and it did when I was trying to... optimize my taxes in a very complex context (e.g. where I live there's a VAT difference on ketchup depending if it's sold on the fresh hot-dog or wrapped one). But since then I try to advocate and use it as often as I can. Mostly because paradigm is super fun to work with and refreshing after all day of working on "normal" languages.
- bux93 3y agoI had the same experience at university. Then, say 5 years later, it "kicked in" and I kept wondering "why isn't this implemented in prolog?" at many, many points.
- tannhaeuser 3y agoWhile there are solutions based on foreign function interfaces and host calling conventions for particular Prologs, you'd basically integrate the kind of apps envisioned/demoed on the Quantum Prolog site [1] like you would any other modern subsystem - as a SaaS and/or via containers. Let's say you have a Prolog optimization app for your business domain, such as an elaborate version of the container ship scheduling problem discussed on the site [2]. Traditionally you'd generate Prolog facts encoding the problem instance, and then invoke Prolog to solve the problem and output one or more found solutions. A variant of this expecting a certain directory structure with facts/rules to exist is used by the Aleph machine learning package also demoed on the site [3]. This is popular and very flexible because of Prolog's ultra-flexible term datatypes. Alternatively, you can implement, in Prolog itself, a small wrapper to parse a JSON representation of your problem instance, where "implement" doesn't really describe it since basic JSON parsing using Prolog's built-in operator precedence parser is as easy as :- op(600, xfy, :). MyJSON = { "this": "bla", "that": 100, "L": [ 1, "two", 3 ] } but applied to standard input using term reading, provided your Prolog has curly braces (should come with ISO DCGs). The in-browser variant of Quantum Prolog [4] emits JSON right away. An API/language binding to call Prolog from a particular host environment is less suited for the kind of apps discussed on the Quantum Prolog site since these tend to be longer-running, and potentially parallelized workloads. But let's say a multiplayer game universe represented as Prolog database (or maybe a highly interactive solution viewer/picker under very particular circumstances) might need a different integration model. [1]: https://quantumprolog.sgml.io/ https://quantumprolog.sgml.io/ [2]: https://quantumprolog.sgml.io/container-planning-demo/part1.html https://quantumprolog.sgml.io/container-planning-demo/part1.... [3]: https://quantumprolog.sgml.io/bioinformatics-demo/part1.html https://quantumprolog.sgml.io/bioinformatics-demo/part1.html [4]: https://quantumprolog.sgml.io/browser-demo/browser-demo.html https://quantumprolog.sgml.io/browser-demo/browser-demo.html
- Scicomath 3y ago[dead]
- maweki 3y ago> I didn't yet found way to seamlessly integrate it into other apps (I know that FFI is an option, but it doesn't convince me as production ready). There is indeed an issue with side-effects that doesn't work well with the backtracking semantics. And I am not sure there's a good solution for it. Other LP languages, like Curry, just forbid side-effects under nondeterminism and you have to collect and handle them using an implementation of effect-handlers if they aren't at the top level. That's a quite restrictive solution that needs a lot of discipline, a good architecture, and framework support. But Prolog, doing side-effects whenever, wherever such a side-effect-entailing predicate is encountered as a proof goal doesn't work either and you're bound to make your life very difficult. Even if you are careful, the code that you produce, just looks like imperative code. So nothing really gained here from using Prolog. I'm still looking/researching about solutions inbetween. Without too too much success.
- tannhaeuser 3y agoMaybe you can review Quantum Prolog's optional reification of the regular Prolog database in order to be able to backtrack over assert/retract and other destructive predicates to represent actions in eg. robotic planning. Works basically like a call/1 variant where the Prolog database to evaluate against is specified as argument rather than assumed as implicit global default, with the database a freely manipulatable list term of facts or even rules. See [1]. [1]: https://quantumprolog.sgml.io/container-planning-demo/part2.html https://quantumprolog.sgml.io/container-planning-demo/part2....
- maweki 3y agoThat's a nice idea and it kind of works with the internal database. But in terms of FFI or other interactivity, you can't un-read bytes from an input stream or un-write to another process. That makes interoperability inherently imperative. My use case is, that you usually wouldn't un-move a robot. You want to re-plan from the current position, if an obstacle comes up. You sure as hell don't want to backtrack into an alternate plan from your original starting position.
- 3y ago
- gleenn 3y agoClojure has a Prolog library written for it called core.logic. I definitely didn't know Prolog well enough to make good use of all the esoteric function names but it seemed cool. https://github.com/clojure/core.logic https://github.com/clojure/core.logic
- deleted 3y ago[deleted]
- FreakLegion 3y agoCore.logic is a miniKanren with some Prolog-ish additions. If you're thinking of names like membero and appendo, those are from miniKanren.
- chuchana 3y agoI know it's not Prolog, but since you mention Lisp: have you checked out Screamer (https://nikodemus.github.io/screamer/ https://nikodemus.github.io/screamer/)?
- xlii 3y agoI did and it's one of my favorite implementations actually! Unfortunately I get this weird vibe with many Common Lisp libraries that they feel... legacy and deprecated. For sure CL isn't super popular language and it is very stable, but minimal development dynamic makes me feel insecure about the solution.
- worthless-trash 3y agoImho, that vibe is great once you get use to it. I think the programming community expects more updates when it simply isnt required.
- scns 3y agoIt sounds similar to Clojure libs. It might be an Illusion. Maybe those libs are done, zero to minimal need for further development! Our perception is shaped by regular bugfixes in other languages
- vintagedave 3y ago> If anyone has success integrating Prolog in modern software please share This doesn't directly answer you, but Prolog was used by David Hovell the Windows NT network configuration to enforce consistency [1][2]. I've heard it's been removed since, so doesn't count as "modern". It's a _beautiful_ application of Prolog though. [1] https://news.ycombinator.com/item?id=36821871 https://news.ycombinator.com/item?id=36821871 which leads to https://web.archive.org/web/20030218034509/http://www.research.microsoft.com/research/dtg/davidhov/pap.htm https://web.archive.org/web/20030218034509/http://www.resear... -- very worth reading! [2] https://news.ycombinator.com/item?id=14046420 https://news.ycombinator.com/item?id=14046420
- marcosdumay 3y agoI do think that the best way to enforce validation rules is with a logic-paradigm language executed both during compile and run times. That would technically be a dependent type system, but with a bias of allowing runtime verification, instead of trying to prove everything at compile time.
- anon____ 3y agoRacket has Racklog: > Racklog is an embedding of Prolog-style logic programming in Racket. “Embedding” means you don’t lose Racket: You can use Prolog-style and conventional Racket code fragments alongside each other. Racklog contains the full repertoire of Prolog features, including meta-logical and second-order (“set”) predicates, leaving out only those features that could more easily and more efficiently be done with Racket subexpressions. https://docs.racket-lang.org/racklog/index.html https://docs.racket-lang.org/racklog/index.html Racket also has GUI, and basically everything else you may need.
- fuzztester 3y ago>Racket also has GUI, and basically everything else you may need. How about good docs and examples, community, decent perf for small apps at least? Racket newbie here. Had just played around with a little some years back when it was called MZ Scheme, PLT Scheme or such. There was an IDE called Dr Scheme, IIRC. I guess all that is part of Racket now.
- anon____ 3y agoDocumentation and educational material is where Racket is unbeatable: https://docs.racket-lang.org/index.html https://docs.racket-lang.org/index.html. The performance is around Python / general scripting level; perfectly acceptable. As you guessed, DrScheme became DrRacket. You can find more info at https://www.racket-lang.org https://www.racket-lang.org, presented much better than I could do here.
- fuzztester 3y agoThanks.
- klibertp 3y agoDocs - oh boy. 90% of contributors to Racket are educators with many decades of experience teaching. The quality, depth, organization, interlinking, examples, references to papers... basically everything about Racket docs is at the level you just don't see anywhere else. Both the reference and guide are works of art. You get Realms of Racket and Beautiful Racket on top of that. Programming Languages: Application and Interpretation you'd find on the same shelf as SICP. How to Design Programs should be mandatory reading (and an antidote for the mind) for every OOP-focused dev out there (though, by the time they're "OOP-focused" they're most likely a lost cause anyway...) What's funny here is that Racket includes an OOP system, which is also described with incredible detail and thoughtfulness. The way they derive mixins from first-class anonymous classes is beautiful and enlightening. I've learned so much from docs.racket-lang.org that no other single resource can even begin to compare. Performance: closer to Groovy, Clojure or Raku than to Python, Ruby or JS. That is, startup is not as fast, but execution after that is decent. For a few years, performance improvements were not the focus of development due to the migration from custom VM to Chez Scheme. Now Racket on Chez is the default and I think we'll see further improvements on that front (easier maintenance and better potential performance were the reasons behind the migration IIRC.) The community is small, and the core strength of Racket is not something normal programmers use in day to day programming (that strength being the ability to shape the syntax and semantics of your code at will, ad hoc, anytime, with no friction at all, in any way you want). On the other hand, the results of giving that power to a bunch of very smart people are really worth seeing.
- verdverm 3y ago> I recommend learning it if only for kicks and experiencing foreign programming paradigm. Many concepts are expressed in a completely different and (when paradigm "kicks in") are arguably much simpler. I say the same thing about CUE these days, it can be a real mind bender but gives us a new way to think about taming config and schema complexity. CUE is also much easier to add into existing workflows to turn that logical programming glory into pragmatism. https://cuelang.org https://cuelang.org | https://cuetorials.com https://cuetorials.com
- nmfisher 3y agoThis looks really interesting, thanks for linking. Is this a Google project? It wasn't immediately clear.
- verdverm 3y agoIt was originally developed at Google, but Marcel is no longer there, there is a team and company behind it now. The language is going to a foundation (still waiting for update from the CUE team), fun fact, it started as a fork of Go (for the lexer, parser, and a bunch of goodies in that source tree) CUE's history is from borg, borgfig, GCL, but takes the approach Marcel always wanted to if not tied to the existing practices in a large company, namely Typed Feature Structures and logical programming (no overrides, layering, inheritance, general recursion) We're about to release a TUI for working with CUE, and hoping that it will make learning much easier for people. We do a lot with Cuetorials, but there is only so much you can do on a website (/rant WASM limitations). Using the Go SDK is the way to unlock CUE super powers. https://github.com/hofstadter-io/hof https://github.com/hofstadter-io/hof
- iot_devs 3y agoYou are looking for souffle: https://souffle-lang.github.io/ https://souffle-lang.github.io/
- throwaway290 3y agoYarn Berry used Prolog for constraint definitions, but I think they gave up on it...
- Ayc0 3y agoIn yarn 4, they introduced an equivalent using pure JS But I don't know if they still support prolog (or maybe as a plugin provided by them for the migration)
- alfiedotwtf 3y agoCheck out Mercury! [1] - Strongly typed and integrates with other languages really really nicely. Besides the reference material on the official site, there's a lovely crash course [2] as well. Prince's [3] base is Mercury and integrates Rust and C without fuss. [1] https://mercurylang.org/ https://mercurylang.org/ [2] https://mercury-in.space/crash.html https://mercury-in.space/crash.html [3] https://www.princexml.com/ https://www.princexml.com/
- okaleniuk 3y agoIn a way, every static typed compiler has a bit of Prolog in it: https://wordsandbuttons.online/logic_programming_in_cpp.html https://wordsandbuttons.online/logic_programming_in_cpp.html
- cylinder714 3y agoI'm really enjoying your book of essays, So You Think You Know C [PDF]: https://wordsandbuttons.online/SYTYKC.pdf https://wordsandbuttons.online/SYTYKC.pdf
- okaleniuk 3y agoThank you!
- prepor 3y ago> If anyone has success integrating Prolog in modern software please share, I'm really curious. https://terminusdb.com/ https://terminusdb.com/ is almost entirely written in prolog. + a little bit of Rust and JS.
- baq 3y agoI’ve had a few use cases for a Prolog-suitable solution over the past decade, but there doesn’t seem to be an easily embeddable Prolog system available, or maybe there wasn’t a couple years ago. I needed a small library without IPC, sockets, forking, watchdogs, etc. Python and node bindings are a gigantic bonus.
- pipo234 3y agoIMHO Prolog is mostly a way of thinking, of designing your software. Making a blazingly fast compiler is an art, but the basic interpreter at the heart of prolog is fairly straight forward to design yourself. Prolog isn't as old as LISP, but keep in mind it had useful applications on contemporary hardware in the 1970s. If you're interested in doing Prolog with Python, have a look at projects like: https://github.com/photonlines/Python-Prolog-Interpreter https://github.com/photonlines/Python-Prolog-Interpreter
- 59nadir 3y agoI worked with a guy that was doing natural language analysis of some sort in Prolog for a contract (we worked at a game development studio, so this was entirely external). I asked him how he actually used it and he basically said what you wrote here: He implemented his own interpreter (in C#) and limited backtracking considerably (as far as I understood) in order to make it useful performance-wise for their use case.
- grose 3y agoFor Node, check out trealla-js: https://github.com/guregu/trealla-js https://github.com/guregu/trealla-js. I tried to make it as easy to embed as possible. This paper is also very interesting. It describes the Janus System, a deep integration between Python and Prolog: https://arxiv.org/pdf/2308.15893v1.pdf https://arxiv.org/pdf/2308.15893v1.pdf
- Avshalom 3y agofor Node there's also http://tau-prolog.org/ http://tau-prolog.org/
- pipo234 3y agoCurious to learn whether Prolog is still an integral part for contemporary CS (proposition, predicate) Logic curriculum, natural language parsing, etc. I suppose that the built-in backtracking was the most controversial aspect, so maybe attention has shifted to Erlang, Haskell or esoteric languages like (wild) life? Anyone currently in education care to comment?
- rpigab 3y agoAs a student, I learned Prolog and Caml in a master's in CS in France, in 2015, though the languages we were most likely to use like Java and C had much more hours of class. I think the teachers, who are also researchers, rarely update the technologies they teach because it's often what they learned when they started teaching.
- pipo234 3y agoThat sounds very familiar. ;-) (For the similar reasons I learned Pascal, Modula 2, Ada when I ought to have learned about C++, Java) If you were a teacher now, having to explain about predicate logic and proof automation, would you choose teaching Prolog? If not, which language would you choose?
- rpigab 3y agoI work as a web developer, and rarely use exotic paradigms like Prolog's logic programming or OCaml's functional programming, so I do not know many alternatives, but I like the value of showing all of these to students, so I'm still ok with teaching Prolog to students, because I'm not familiar with alternatives. If I knew alternatives that were very recent, like 4-5 years old, I'd be careful replacing the current courses, because often in technology, statistically, if something has been there for a long time, it'll be there for a long time, and many new things die young.
- ekojs 3y agoI recently did a stint as a TA for my university's undergraduate Prolog course. It's pretty much an elective here with the main goal of introducing students to a a different paradigm. Applications of Prolog for natural language were discussed but not the main focus. I reckon that the FP course (using Haskell) touch more about parsing (using parser combinators) than the Prolog course.
- hendler 3y agoI'd love a new way to write first order logic programs. I tried to generate prolog from natural language using GPT4 with sometimes interesting results. https://github.com/HumanAssistedIntelligence/logical https://github.com/HumanAssistedIntelligence/logical
- jlpom 3y agoI’ve had the same idea to improve reasoning of LLM. Glad you made it.
- deleted 3y ago[deleted]
- philjohn 3y agoI remember learning Prolog during my degree in AI + Comp Sci about 25 years ago. Our NLP module used it heavily. It was frustrating and annoying at first, but once you get comfortable, surprisingly fun (and also a great intro to recursion, as that's the only way to iterate).
- ggambetta 3y agoSimilar experience. It was frustrating and annoying at first for me too, because I was trying to write imperative code in Prolog syntax. But once the new paradigm clicked in my head, OMG, I started loving it. That moment of enlightenment alone was well worth taking that class :)
- noneeeed 3y agoOne of the things Prolog taught me was the importance of teachers who can put themselves in the shoes of the student. At university we were largely taught Prolog by mathematicians who exclusively worked in such languages. Prolog was a very natural way of thinking for them, and many of them had never really used other non-logic/functional languages. For most of the students, who had worked mostly with procedural languages before, it was confusing and frustrating, we would all get tied up trying to use Prolog as if it were some other language. It wasn't until my third or fourth course that used Prolog, and having studied the algorithm behind it, that I really got my head around how to use it well. Later on I was helping an undergrad I knew was having problems with Prolog. It was mostly about how to change the way he thought about solving problems to fit in the Prolog world, rather than trying to make Prolog behave like all the other languages he'd used (he was a great developer in everything except Prolog). After quite a bit of discussion there was a real epiphany and he suddenly got it and he proceeded to nail the coursework.
- adhvaryu 3y agoWe had it in my comp sci bachelor's just a few years ago. But it was a small component of the AI course instead of being a big part of it. Fun stuff regardless.
- YeGoblynQueenne 3y ago(and also a great intro to recursion, as that's the only way to recurse) FTFY :P
- 2-718-281-828 3y agoI'm currently trying to learn Prolog. Reason is because I attempt to reignite my enthusiasm for IT by going back to the roots. And the joy of learning new programming languages / paradigms was what brought me into the field more than 20 years ago. I find Prolog very challenging for several reasons. I identified 3 levels of difficulty with it: 1) Syntax 2) Reasoning and Paradigm 3) Implementation 1) is things like "\=" for not equal. Those are mostly just inconveniences and Prolog's age is showing there. But I still don't have a firm grip on the pattern matching of lists. 2) is the whole stuff around switching mentally from functions to predicates. I often find myself trapped in trying to reason functionally and if I was very proficient in functional programming that might even work. But so far I'm still at the level of trying to wrap my head around the fact that there no return values and that sequencing via comma (which is actually a conjunction - AND) will be evaluated "kind of" procedural by serial evaluation. This makes it seem familiar but conflicts with the actual paradigm. 3) is the most critiqued aspect of it. There are many Prolog implementations it but they all seem to suffer from the same problems. Like Prolog getting lost in some tree which forces the developer to understand what the interpreter is doing to help it find the right branch. Also the aforementioned confusion that logically (A AND B) is identical to (B AND A) but in Prolog isn't and can make the subtle difference between the program finishing successfully or running until memory is consumed. In my opinion there is reason why Prolog is one of those subjects that are brought up here again and again and again but without any justification with regard to something about it being "news". It's a very fascinating paradigm and I find it very sad that it doesn't really get any attention today. Just check the list of literature about it - there's almost nothing and what there is either old or distinctively academic. One reason clearly is the lack of convenient interfacing to other languages. Because even a Prolog genius would probably admit that there is no point in trying to implement anything IO with it. I'm working through Learn Prolog Now. Which is a good book. Already ordered Prolog in Adventures. I could see several projects for it that would be a natural fit but I already anticipate that eventually my enthusiasm will fade at the point where I'm forced to dig into SWI as soon as I leave the toy level. SWI is also kind of weird. It seems to be the best choice but there are surprisingly trivial aspects about it that I find very unsatisfying (I can load a DB with "[filename]." but I cannot purge it before loading another DB without restarting the session ... or does somebody know how that's done?). That's basically what I observe as far as my as well as other people's experience goes with it: very promising and exciting but eventually disappointing. It shouldn't be like that. I also believe that symbolic AI / Prolog and deep learning could very well benefit from each other.
- dathinab 3y agoplease never put text like "You may not believe this, ..." or anything similar in technical documentation, blogs and similar making assumptions about what other people think (or say) is belittling/impolite it's also stylistically has a bit of a "sensationalist" touch, which just makes it feel misplaced in this kind of articles IMHO
- mrkeen 3y agoLikewise with "IMHO". https://www.eng-tips.com/viewthread.cfm?qid=90305 https://www.eng-tips.com/viewthread.cfm?qid=90305
- dathinab 3y agoyes for a blog or similar technical article but practically there is a difference between thinks people believe are objectively true and things which they are less sure about or find quite subjective IMHO and AFIK are like an emoji they add additional subtle context and should in no way be read literally like emoji they do not belong in technical articles, but are normal in more short form text conversations
- sambeau 3y agoI found that statement to be the most informative part of the document. It made me stop and consider it as, yes, I wouldn't have believed it until it was so explicitly pointed out. Science is full of authors supposing what other people believe and then surprising them with their findings. "Remarkably", "perhaps unintuitively", "convention states", "a striking consequence", "a surprising result", … You may not believe this, but here's Feynman making assumptions about what other people think: Because atomic behavior is so unlike ordinary experience, it is very difficult to get used to, and it appears peculiar and mysterious to everyone—both to the novice and to the experienced physicist. Even the experts do not understand it the way they would like to, and it is perfectly reasonable that they should not, because all of direct, human experience and of human intuition applies to large objects. Here's Newton using "which is an erroneous Supposition", his version of "you may not believe this": Are not all Hypotheses erroneous, in which Light is supposed to consist in Pression or Motion, propagated through a fluid Medium? For in all these Hypotheses the Phaenomena of Light have been hitherto explain'd by supposing that they arise from new Modifications of the Rays; which is an erroneous Supposition. As Albert Einstein wrote: The whole of science is nothing more than a refinement of everyday thinking. It is for this reason that the critical thinking of the physicist cannot possibly be restricted to the examination of the concepts of his own specific field. He cannot proceed without considering critically a much more difficult problem, the problem of analyzing the nature of everyday thinking. How can you do that without making assumptions about what other people think?
- FreeFull 3y agoThe other comments are talking about just Prolog in general, but I have to say, The Power of Prolog is a rather excellent series of tutorials. The videos are worth watching too, Markus does a great job of capturing the viewer's/reader's interest.
- riesenheim 3y agoAs someone who shared so many commenters' experiences of initial frustrations and the later 'enlightenment' with Prolog, I recommend starting with Markus's video 'Preparing Prolog' https://www.metalevel.at/prolog/videos/preparing_prolog https://www.metalevel.at/prolog/videos/preparing_prolog This helped me to appreciate Prolog as an ongoing, progressive movement in programming.
- pretext 3y agoDiscussed here a year ago: https://news.ycombinator.com/item?id=31641014 https://news.ycombinator.com/item?id=31641014 Anyway, wonderful site and I'm glad to see this topic recurring.
- usgroup 3y agoI actively use Prolog for data analysis. There is an initial phase in which you have to force yourself to do everything you can in Prolog mostly to understand how to convert a question into a symbolic problem because Prolog has terrible support for scientific computing and string manipulation. Thereafter Prolog solutions are often more elegant than the next best thing. It is also a logical paradigm and it is worth spending the time understanding how [proof by negation] + [unification] = [logical programming]. For me it is without doubt the most mind expanding programming language I've ever learned.
- NotMichaelBay 3y agointeresting, can you give an example of how you would use it for data analysis?
- tannhaeuser 3y agoNot OP, but you may find Inductive Logic Programming (ILP) interesting, ie. ML with a logic programming flavor for learning logic theories from data. While [1] focusses on porting the well-known Aleph ILP package to ISO Prolog and getting it to speed via parallelization, it might give you enough of an idea and a couple pointers where to go from there. Working with CSV or JSON data and performing relational ad hoc queries or employing Prolog for combinatoric test/coverage data generation is also very convenient. [1]: https://quantumprolog.sgml.io/bioinformatics-demo/part1.html https://quantumprolog.sgml.io/bioinformatics-demo/part1.html
- usgroup 3y agoSure: https://emiruz.com/post/2023-04-30-prolog-for-data-science/ https://emiruz.com/post/2023-04-30-prolog-for-data-science/ https://emiruz.com/post/2023-05-12-semi-supervised-clustering/ https://emiruz.com/post/2023-05-12-semi-supervised-clusterin...
- crabbone 3y agoProlog has very decent support for string manipulation... there are hardly any modern popular languages that offer anything like DCGs out of the box. Even though standard Prolog doesn't have regular expressions out of the box, popular implementations usually have libraries to do that. If I had to do a lot of work with strings, and I had to choose between, say, C and Prolog, I'd definitely go with Prolog. If it was Python vs Prolog, it would depend on a task...
- bradley13 3y agoProlog is a beautiful language. I've written 10s of thousands of lines of it, for mathematical reasoning, rule-based reasoning, etc.. Those are domains where it fits perfectly, and working with it is incredibly fun. Prolog has two problems for other kinds of applications. First, it doesn't play well with libraries and other languages, because the paradigms are so different. Second, doing any sort of decent GUI is close to impossible, again, because it doesn't fit the paradigm.
- crabbone 3y agoI helped write the interop with Go part of GoLog. And, no, it's not really difficult to interface with other languages. Usually, from Prolog side you see the foreign interface as a predicate with all ground arguments and from the foreign sign you interact with Prolog similar to how you would interact with SQL database: you send a query, then deconstruct the query (including requesting more solutions or driving backtracking etc.) You could say these aren't "interesting" interactions. But this is how it would work because libraries don't really exploit the useful features of Prolog. You could, in principle, write "thicker" layers of interop, where you'd probably have to aggregate multiple library functions into single predicate interface on the Prolog side, where a specific sub-routine would be called based on instantiation mode of the arguments. But this is hardly different from exposing C libraries to object-oriented languages (like Python), where you aggregate multiple C functions to act like property accessors or to act like methods of a data-structure etc.
- kriro 3y agoI can basically +1 the sentiment here. Used Prolog during my three university AI classes (basically "AI A Modern Approach" front to back + Prolog programming) and it was a mind bending experience. I always have to warm up before my brain can think Prolog again. I also wrote horrible prology spaghetti code in my other language during the Prolog semesters :D Biggest downside "back in the day" was interop with other things was tricky. Either you embedded a Prolog in a JVM or something like that (usually with less features) or you relied on some sort of C binding. My takeaway was it's great so solve certain tasks (especially CSP) but not for solving tasks with a user interface in the mix (or file system access or any miriad of other things). "Back then" SWI was also lagging behind and we used some proprietary solution which I'm generally not a fan of when it comes to programming languages/environement (Sicstus iirc.). Last time I checked SWI has caught up with the prorietary stuff and would be my go to now though. The Prolog exam was also the one I was most afraid of during university because it consisted of a 60 Minute live coding section (solve three tasks of increasing difficulty) followed by an oral exam. My prep experience was that often times it just takes some reasoning and sitting there before the magic moment comes and the Prolog solution pops up in my brain...not exactly what you want in a timed exam situation. Thankfully I aced it by spending 40 minutes on the easiest task and solving the other two in a matter of minutes. The follow up course was a lot of fun (implement a game playing agent and compete against other teams in a tournament). "The Art of Prolog" and "The Craft of Prolog" were also two of the better programming books I have read in my life.
- flir 3y ago> it was a mind bending experience Still remember the expressions of the undergrads walking out of our first Prolog lecture. Equal parts shell-shocked and worried. There's a thought: I wonder how the chatbots handle Prolog. Have they seen enough of it? Can they "reason" in that way?
- PaulHoule 3y agoIn Prolog you can write "pure logical" programs or you can use cuts and some other mechanisms to write imperative programs in it. The methods for writing imperative programs in Prolog are really clever but they are also awkward. (For instance "success" is often represented as a logical false and "failure" as a logical true) I think there has been an explosion of interest in a pure logical dialect of Prolog called Datalog https://en.wikipedia.org/wiki/Datalog https://en.wikipedia.org/wiki/Datalog when I first got interested in the semantic web I thought "OWL sucks" and thought Datalog was an interesting alternative, although it was invented in 1986 there was very little literature on it. I got dragged kicking and screaming away from the semantic web multiple times and when I got back to it again recently I found that the opinion "OWL sucks, use Datalog instead" has gotten widespread and now there are a lot of Datalog implementations and a huge literature. (Oddly, I met somebody who taught me the true meaning of OWL and how to do interesting things with it.) If you think that materialized views, CTEs and such are a ugly and disorganized mess in SQL you might like datalog a lot. (Of course if you think triggers are a disorganized mess you might like production rules but I haven't quite seen a production rules-based database that really works.)
- DanielHB 3y agoImplementing A* graph search in prolog was the hardest 10 lines of code I ever wrote in my life
- cylinder714 3y agoMark Tarver's Shen language embeds a complete implementation of Prolog: https://shenlanguage.org/SD/Prolog.html https://shenlanguage.org/SD/Prolog.html And the chapter from The Book of Shen: https://shenlanguage.org/TBoS/tbos_359.html https://shenlanguage.org/TBoS/tbos_359.html Tarver has written two books with accompanying software on logic programming: Logic, Proof and Computation: https://shenlanguage.org/lpc.html https://shenlanguage.org/lpc.html Programming the Logic Lab: https://shenlanguage.org/logiclab.html https://shenlanguage.org/logiclab.html
- eggy 3y agoI love Shen, but I have not taken it on. I subscribed to the professional version for half a year, and I like the amount of implementations of Shen in other PLs. The pattern matching, optional type checking, and the built-in Prolog is incredible. It's a case where the creator has been shunned by the wider community, partially due to his diplomacy, but he is brilliant, and the uptake has been niche and bleeding edge. If it had a Mozilla behind it or other, I think it would have been more universally appealing. @deech's talks, though older now, are fantastic and relevant[1,2]. But take what I have to say with a grain a salt: I am an avid APL/J/BQN fanboy ;) [1] https://www.youtube.com/watch?v=lMcRBdSdO_U https://www.youtube.com/watch?v=lMcRBdSdO_U [2] https://www.youtube.com/watch?v=BUJNyHAeAc8 https://www.youtube.com/watch?v=BUJNyHAeAc8
- agumonkey 3y agotangential: scryer prolog just made a wasm based playground (IIUC) https://play.scryer.pl/ https://play.scryer.pl/
- wslh 3y agoWhat is/are the succesor(s) of Prolog?
- carapace 3y agoProlog. (Seriously though, there are many things that could be considered successors, like Mercury or maybe even Datalog, but to a first approximation I'd say that Prolog is still timely.)
- jodrellblank 3y agoSee this recently: https://news.ycombinator.com/item?id=37458686 https://news.ycombinator.com/item?id=37458686 Scryer Prolog can now run on WASM and in browser, client side.
- mcswell 3y agoFWIW (not much, admittedly), I once wrote a morphological parser in Prolog (mostly, there was some C code for dealing with bit-level operations). About the time I finished the project, the version I was using (Arity Prolog) went out of business. The owner made it freely available, but from what I could tell that version was buggy. The parser eventually got re-written in C, and is used to this day. Prolog seemed a good fit, as I wanted to find all possible parses of words, and the backtracking mechanism solved that. I also need to handle morphosyntactic features (like person and number), and Prolog's unification algorithm provided exactly what was needed.
- synthc 3y agoBack in college I took a class in Prolog. We had to implement a Sudoku solver and at some point I got stuck. I was trying to bring over my imperative programming mindset, I had written a solver in Java before and I tried to port over the Java code to Prolog, which did not work at all. So at some point I started over, and wrote some simple Prolog code to check if the Sudoku is valid. Then I realized that I could also run these predicates to solve the Sudoku, and I completed the solver in under 10 lines. It was a real eureka moment, Prolog is very powerful, but criminally underused in practice, fortunately I had the opportunity to work with Datalog and OWL.