12 ms·
Learn Prolog Now (2006)
- jackallis 1y agois prolog a use-case language or is it as versatile as python?
- zimpenfish 1y agoIn theory, it's as versatile as Python et al[0] but if you're using it for, e.g., serving bog-standard static pages over HTTP, you're very much using an industrial power hammer to apply screws to glass - you can probably make it work but people will look at you funny. [0] Modulo that Python et al almost certainly have order(s) of magnitude more external libraries etc.
- bigfishrunning 1y ago> you can probably make it work but people will look at you funny Don't threaten me with a good time
- qsort 1y agoPython wins out in the versatility conversation because of its ecosystem, I'm still kinda convinced that the language itself is mid. Prolog has many implementations and you don't have the same wealth of libraries, but yes, it's Turing complete and not of the "Turing tarpit" variety, you could reasonably write entire applications in SWI-Prolog.
- WillAdams 1y agoRight, Python is usually the second-best choice for a language for any problem --- arguably the one thing it is best at is learning to program (in Python) --- it wins based on ease-of-learning/familiarity/widespread usage/library availability.
- aeonik 1y agoMore like 3rd to 5th best is most categories. There's just a lot of categories. Its ease of use and deployment give it a lot more staying power. The syntax is also pretty nice.
- ecshafer 1y agoI don't know if I would say its second-best. It just happened to get really popular because it has relatively easy syntax, and Numpy is a really great library making all of those scientific packages that people were using Fortran and C++ for before available in an easier language. This boosted the language, right when data science became a thing, right when dynamic programming became popular, right when there was a boost in Learn 2 Code forget about learning fundamentals was a thing. Its an okay language I guess, but I really think it was lucky that Numpy exists and Numby or Numphp.
- hunterpayne 1y agoThat's not why Python is popular. Python is popular because universities don't provide technical support to researchers (which they should). So those researchers picked up the scripting language the sysops in the univ clusters were using. Those same researchers left academia but never learned any CS or other programming languages. Instead they used the 'if all you have is a hammer, everything is a nail' logic and used Python to glue together libraries, mostly written in C. PS The big companies that actually make the LLMs, don't use Python (anymore). Its a lousy language for ML/AI. Its designed to script Linux GUIs and automate tasks. Its started off as a Perl replacement afterall. And this isn't a slight on the folks who write Python itself. It is a problem for all the folks who insist on slamming it into all sorts of places that it isn't well suited because they won't learn any CS.
- ux266478 1y agoPersonally I find Python more towards the bottom of the list with me, despite being the language I learned on. Especially if the code involved is "pythonic". Just doesn't jive with my neurochemistry. All the problems of C++ with much greater ambiguity, and I've never really been impressed with the library ecosystem. Yeah there's a lot, but just like with node it's just a mountain of unusably bad crap. I think lua is the much better language for a wide variety of reasons (Most of the good Python libraries are just wrappers around C libraries, which is necessary because Python's FFI is really substandard), but I wouldn't reach for python or lua if I'm expecting to write more than 1000 lines of code. They both scale horribly.
- rramadass 1y agoFWIK; You can't compare the two. Python is far more general and larger than Prolog which is more specialized. However there have been various extensions to Prolog to make it more general. See Extensions section in Prolog wikipedia page - https://en.wikipedia.org/wiki/Prolog#Extensions https://en.wikipedia.org/wiki/Prolog#Extensions Eg. Prolog++ - https://en.wikipedia.org/wiki/Prolog%2B%2B https://en.wikipedia.org/wiki/Prolog%2B%2B to allow one to do large-scale OO programming with Prolog. Earlier, Prolog was used in AI/Expert Systems domains. Interestingly it was also used to model Requirements/Structured Analysis/Structured Design and in Prototyping. These usages seems interesting to me since there might be a way to use these techniques today with LLMs to have them generate "correct" code/answers. For Prolog and LLMs see - https://news.ycombinator.com/item?id=45712934 https://news.ycombinator.com/item?id=45712934 Some old papers/books that i dug up and seem relevant; Prototyping analysis, structured analysis, Prolog and prototypes - https://dl.acm.org/doi/10.1145/57216.57230 https://dl.acm.org/doi/10.1145/57216.57230 Prolog and Natural Language Analysis by Fernando C. N. Pereira and Stuart M. Shieber (free digital edition) - http://www.mtome.com/Publications/PNLA/pnla.html http://www.mtome.com/Publications/PNLA/pnla.html The Application of Prolog to Structured Design - https://www.researchgate.net/publication/220281904_The_Application_of_Prolog_to_Structured_Design https://www.researchgate.net/publication/220281904_The_Appli...
- jodrellblank 1y agoDo you mean Northern Conservative Baptist Great Lakes Region Council of 1879 standard Prolog?[2] SWI Prolog (specifically, see [2] again) is a high level interpreted language implemented in C, with an FFI to use libraries written in C[1], shipping with a standard library for HTTP, threading, ODBC, desktop GUI, and so on. In that sense it's very close to Python. You can do everyday ordinary things with it, like compute stuff, take input and output, serve HTML pages, process data. It starts up quickly, and is decently performant within its peers of high level GC languages - not v8 fast but not classic Java sluggish. In other senses, it's not. The normal Algol-derivative things you are used to (arithmetic, text, loops) are clunky and weird. It's got the same problem as other declarative languages - writing what you want is not as easy as it seemed like it was going to be, and performance involves contorting your code into forms that the interpreter/compiler is good with. It's got the problems of functional languages - everything must be recursion. Having to pass the whole world state in and out of things. Immutable variables and datastructures are not great for performance. Not great for naming either, temporary variable names all over. It's got some features I've never seen in other languages - the way the constraint logic engine just works with normal variables is cool. Code-is-data-is-code is cool. Code/data is metaprogrammable in a LISP macro sort of way. New operators are just another predicate. Declarative Grammars are pretty unique. The way the interpreter will try to find any valid path through your code - the thing which makes it so great for "write a little code, find a solution" - makes it tough to debug why things aren't working. And hard to name things, code doesn't do things it describes the relation of states to each other. That's hard to name on its own, but it's worse when you have to pass the world state and the temporary state through a load of recursive calls and try to name that clearly, too. This is fun: countdown(0) :- write("finished!"). countdown(X) :- writeln(X), countdown(X-1). It's a recursive countdown. There's no deliberate typos in it, but it won't work. The reason why is subtle - that code is doing something you can't do as easily in Python. It's passing a Prolog source code expression of X-1 into the recursive call, not the result of evaluating X-1 at runtime. That's how easy metaprogramming and code-generation is! That's why it's a fun language! That's also how easy it is to trip over "the basics" you expect from other languages. It's full of legacy, even more than Python is. It has a global state - the Prolog database - but it's shunned. It has two or three different ways of thinking about strings, and it has atoms. ISO Prolog doesn't have modules, but different implementations of Prolog do have different implementations of modules. Literals for hashtables are contentious (see [2] again). Same for object orientation, standard library predicates, and more. [1] https://www.swi-prolog.org/pldoc/man?section=foreign https://www.swi-prolog.org/pldoc/man?section=foreign [2] https://news.ycombinator.com/item?id=26624442 https://news.ycombinator.com/item?id=26624442
- hunterpayne 1y agoThat's like comparing a nuclear reactor to a pickup truck. They are different things and one doesn't replace the other in any meaningful way.
- a96 1y agoIt's a language that should have just been a library. There's nothing noteworthy about it and it's implementable in any working language. Sometimes quite neatly. Schelog is a famous example.
- woumn 1y ago[flagged]
- mattbettinson 1y agoIn university, Learning prolog was my first encounter with the idea that my IQ may not be as high as I thought
- ge96 1y agointro to quantum physics for me (which is only sophomore) I noped out of advanced math/physics at that point, luckily I did learn to code on my own
- chanux 1y agoI thoroughly enjoyed doing all the exercises. It was challenging and hence, fun! I don't think I ever learned how it can be useful other than feeding the mind.
- chadcmulligan 1y agoThere was a time when the thinking was you can load all the facts into a prolog engine and it would replace experts like doctors and engineers - expert systems, it didn't work. Now its a curiosity
- vidarh 1y agoI also found it mindbending. But some parts, like e.g. the cut operator is something I've copied several times over for various things. A couple of prototype parser generators for example - allowing backtracking, but using a cut to indicate when backtracking is an error can be quite helpful.
- exasperaited 1y ago"Keep your exclamation points under control. You are allowed no more than two or three per 100,000 words of prose." Elmore Leonard, on writing. But he might as well have been talking about the cut operator. At uni I had assignments where we were simply not allowed to use it.
- 1y ago
- echelon 1y agoThere are declarative languages like SQL and XSLT. And then there are declarative languages like Prolog.
- droningparrot 1y agoI had more success with the Prolog language track on https://exercism.org/tracks/prolog https://exercism.org/tracks/prolog It's a mind-bending language and if you want to experience the feeling of learning programming from the beginning again this would be it
- zemptime 1y agoI've recently started modeling some of my domains/potential code designs in Prolog. I'm not that advanced. I don't really know Prolog that well. But even just using a couple basic prolog patterns to implement a working spec in the 'prolog way' is *unbelievably* useful for shipping really clean code designs to replace hoary old chestnut code. (prolog -> ruby)
- ramses0 1y agoI keep wishing for "regex for prolog", ie: being able to (in an arbitrary language) express some functional bits in "prolog-ish", and then be able to ask/query against it. let prologBlob = new ProLog() prologBlob.add( "a => b" ).add( "b => c" ) prologBlob.query( "a == c?" ) == True (not exactly that, but hopefully you get the gist) There's so much stuff regarding constraints, access control, relationship queries that could be expressed "simply" in prolog and being able to extract out those interior buts for further use in your more traditional programming language would be really helpful! (...at least in my imagination ;-)
- zemptime 1y agoI've wished for the same kind of 'embed prolog in my ruby' for enumerating all possible cases, all invalid cases, etc in test suites. Interesting to know it's not just me!
- naasking 1y agoMaybe try a Ruby Kanren implementation: https://minikanren.org/ https://minikanren.org/ uKanren is conceptually small and simple, here's a Ruby implementation: https://github.com/jsl/ruby_ukanren https://github.com/jsl/ruby_ukanren
- dflock 1y agoThere are a bunch of libraries that will do this - here's one example of a python one: https://github.com/yuce/pyswip https://github.com/yuce/pyswip - and a ruby one: https://github.com/preston/ruby-prolog https://github.com/preston/ruby-prolog
- dukeofdoom 1y agoAlways felt this would be language that Sherlock Holmes would use...so be sure to wear the hat when learning it
- rramadass 1y ago“A touch! A distinct touch!” cried Holmes. "You are developing a certain unexpected vein of pawky humour, Watson, against which I must learn to guard myself". -- from "The Valley of Fear" by Arthur Conan Doyle.
- waynecochran 1y agoI remember writing a Prolog(ish) interpreter in Common Lisp in an 90's AI course in grad school for Theorem proving (which is essentially what Prolog is doing under the hood). Really foundational to my understanding of how declarative programming works. In an ideal world I would still be programming in Lisp and using Prolog tools.
- travisgriggs 1y ago> In an ideal world… I see this sentiment a lot lately. A sense of missed nostalgia. What happened? In 20 years, will people reminisce about JavaScript frameworks and reminisce how this was an ideal world??
- drannex 1y agoI can tell you, from the year 2045, that running the worlds global economy on Javascript was the direct link to the annihilation of most of our freedom and existence. Hope this helps.
- javcasas 1y agoLucky you and your multiverse. In our multiverse we vibe coded the economy until the LLM decided we needed to construct more paperclips.
- fithisux 1y agoI also see the CL or Tcl+C or Assembly as an ideal world.
- teunispeters 1y agoSpeaking as someone who just started exploring Prolog and lisp, and ended up in the frozen north isolated from internet - access. The tools were initially locked/commercial only during a critical period, and then everyone was oriented around GUIs - and GUI environments were very hostile to the historical tools, and thus provided a different kind of access barrier. A side one is that the LISP ecology in the 80s was hostile to "working well with others" and wanted to have their entire ecosystem in their own image files. (which, btw, is one of the same reasons I'm wary of Rust cough) Really, it's only become open once more with the rise of WASM, systemic efficiency of computers, and open source tools finally being pretty solid.
- ux266478 1y agoProlog really is such a fantastic system, if I can justify its usage then I won't hesitate to do so. Most of the time I'll call a language that I find to be powerful a "power tool", but that doesn't apply here. Prolog is beyond a power tool. A one-off bit of experimental tech built by the greatest minds of a forgotten generation. You'd it find deep in irradiated ruins of a dead city, buried far underground in a bunker easily missed. A supercomputer with the REPL's cursor flickering away in monochrome phosphor. It's sitting there, forgotten. Dutifully waiting for you to jack in.
- lmf4lol 1y agoWhen I entered university for my Bachelors, I was 28 years old and already worked for 5 or 6 years as a self-taught programmer in the industry. In the first semester, we had a Logic Programming class and it was solely taught in Prolog. At first, I was mega overwhelmed. It was so different than anything I did before and I had to unlearn a lot of things that I was used to in "regular" programming. At the end of the class, I was a convert! It also opened up my mind to functional programming and mathematical/logical thinking in general. I still think that Prolog should be mandatory for every programmer. It opens up the mind in such a logical way... Love it. Unfortunately, I never found an opportunity in my 11 years since then to use it in my professional practice. Or maybe I just missed the opportunities?????
- ux266478 1y agoDid they teach you how to use DCGs? A few months ago I used EDCGs as part of a de-spaghettification and bug fixing effort to trawl a really nasty 10k loc sepples compilation unit and generate tags for different parts of it. Think ending up with a couple thousand ground terms like: tag(TypeOfTag, ParentFunction, Line). Type of tag indicating things like an unnecessary function call, unidiomatic conditional, etc. I then used the REPL to pull things apart, wrote some manual notes, and then consulted my complete knowledgebase to create an action plan. Pretty classical expert system stuff. Originally I was expecting the bug fixing effort to take a couple of months. 10 days of Prolog code + 2 days of Prolog interaction + 3 days of sepples weedwacking and adjusting the what remained in the plugboard.
- _spduchamp 1y agoI remember a project I did in undergrad with Prolog that would fit connecting parts of theoretical widgets together based on constraints about how different pieces could connect and it just worked instantly and it felt like magic because I had absolutely no clue how I would have coded that in Pascal or COBOL at that time. It blew my mind because the program was so simple.
- DeathArrow 1y agoWhat kind of problems is Prolog helping to solve besides GOFAI, theorem proving and computational linguistics?
- glkindlmann 1y agoOthers have more complete answers, but the value for me of learning Prolog (in college) was being awakened to a refreshingly different way of expressing a program. Instead of saying "do this and this and this", you say "here's what it would mean for the program to be done".
- ux266478 1y agoAny kind of problem involving the construction, search or traversal of graphs of any variety from cyclic semi-directed graphs to trees, linear programming, constraint solving, compilers, databases, formal verification of any kind not just theorem proving, computational theory, data manipulation, and in general anything.
- gota 1y agoAt work, I bridged the gap between task tracking software and mandatory reports (compliance, etc.). Essentially, it handles distributing the effective working hours of workers across projects, according to a varied and very detailed set of constraints (people take time off, leave the company and come back, sick days, different holidays for different remote workers, folks work on multiple stuff at the same time, have gaps in task tracking, etc.). In the words of a colleague responsible for said reports it 'eliminated the need for 50+ people to fill timesheets, saves 15 min x 50 people x 52 weeks per year' It has been (and still is) in use for 10+years already. I'd say 90% of the current team members don't even know the team used to have to "punch a clock" or fill timesheets way back.
- rramadass 1y agoSee my comment here - https://news.ycombinator.com/item?id=45902960 https://news.ycombinator.com/item?id=45902960
- cess11 1y agoScheduling, relational modeling, parsing. These things come up all the time. Look at DCG:s if you want to quickly become dangerous.
- arein3 1y agoWe had it in university courses and it seemed useless. DSL for backtracking.
- a96 1y agoYes. As an add-on or library, it could be useful, but as a language it's just a forgotten dead end.
- arein3 1y agoAnd for some cases it's easier to understand if you write the backtracking yourself, and can edit/debug it. That is in case you write readable code professionally, as such algorhythms are not very intuitive for a person who sees it first time.
- ecshafer 1y agoI really enjoyed learning Prolog in university, but it is a weird language. I think that 98% of tasks I would not want to use Prolog for, but for that remaining 2% of tasks it's extremely well suited for. I have always wished that I could easily call Prolog easily from other languages when it suited the use case, however good luck getting most companies to allow writing some code in Prolog.
- rootnod3 1y agoThat is where Lisp or Scheme weirdly shines. It is incredibly easy to add prolog to a Lisp or a Scheme. It’s almost as if it comes out naturally if you just go down the rabbit hole. “The little prover” is a fantastic book for that. The whole series is.
- ecshafer 1y agoI worked through the little scheme but not the little prover, I think Ill take a look at that. Thanks.
- rootnod3 1y agoOne can of course add the same stuff to other languages in form of libraries and stuff, but lisp/scheme make it incredibly easy to make it look like part of the language itself and make seem a mere extension of the language. So you can have both worlds if you want to. Lisp/scheme is not dead. In fact, in recent years people have started contributing again and are rediscovering the merits.
- ashton314 1y agoRacket really shines in this regard: Racket makes it easy to build little DSLs, but they all play perfectly together because the underlying data model is the same. Example from the Racket home page: https://racket-lang.org/#any-syntax https://racket-lang.org/#any-syntax You can have a module written in the `#racket` language (i.e., regular Racket) and then a separate module written in `#datalog` and the two can talk to each other!
- 1y ago
- quux 1y agoyes
- samuell 1y agoI love Prolog, and have seen so many interesting use cases for it. In the end though, it mostly just feels enough of a separate universe to any other language or ecosystem I'm using for projects that there's a clear threshold for bringing it in. If there was a really strong prolog implementation with a great community and ecosystem around, in say Python or Go, that would be killer. I know there are some implementations, but the ones I've looked into seem to be either not very full-blown in their Prolog support, or have close to non-existent usage.
- disambiguation 1y agoI am once again shilling the idea that someone should find a way to glue Prolog and LLMs together for better reasoning agents. https://news.ycombinator.com/context?id=43948657 https://news.ycombinator.com/context?id=43948657 Thesis: 1. LLMs are bad at counting the number of r's in strawberry. 2. LLMs are good at writing code that counts letters in a string. 3. LLMs are bad at solving reasoning problems. 4. Prolog is good at solving reasoning problems. 5. ??? 6. LLMs are good at writing prolog that solves reasoning problems. Common replies: 1. The bitter lesson. 2. There are better solvers, ex. Z3. 3. Someone smart must have already tried and ruled it out. Successful experiments: 1. https://quantumprolog.sgml.net/llm-demo/part1.html https://quantumprolog.sgml.net/llm-demo/part1.html
- naasking 1y ago> LLMs are bad at counting the number of r's in strawberry. This is a tokenization issue, not an LLM issue.
- f1shy 1y agoWouldn’t that be like a special case of neuro-symbolic programming?! There are plenty of research going on
- jodrellblank 1y ago> "4. Prolog is good at solving reasoning problems." Plain Prolog's way of solving reasoning problems is effectively: for person in [martha, brian, sarah, tyrone]: if timmy.parent == person: print "solved!" You hard code some options, write a logical condition with placeholders, and Prolog brute-forces every option in every placeholder. It doesn't do reasoning. Arguably it lets a human express reasoning problems better than other languages by letting you write high level code in a declarative way, instead of allocating memory and choosing data types and initializing linked lists and so on, so you can focus on the reasoning, but that is no benefit to an LLM which can output any language as easily as any other. And that might have been nice compared to Pascal in 1975, it's not so different to modern garbage collected high level scripting languages. Arguably Python or JavaScript will benefit an LLM most because there are so many training examples inside it, compared to almost any other langauge.
- myth_drannon 1y agoTwo Prolog books that I find very interesting: Advanced Turbo prolog - https://archive.org/details/advancedturbopro0000schi/mode/2up https://archive.org/details/advancedturbopro0000schi/mode/2u... Prolog programming for artificial intelligence - https://archive.org/details/prologprogrammin0000brat_l1m9/mode/2up https://archive.org/details/prologprogrammin0000brat_l1m9/mo...
- wodenokoto 1y agoThe background image says "testing version" - is there a production version?
- dinkleberg 1y agoIt looks like that is in reference to the embedded interactive code blocks. If you use uBlock Origin you can use the element picker to remove the annoying image.
- cubefox 1y agoThere seems to an interesting difference between Prolog and conventional (predicate) logic. In Prolog, anything that can't be inferred from the knowledge base is false. If nothing about "playsAirGuitar(mia)" is implied by the knowledge base, it's false. All the facts are assumed to be given; therefore, if something isn't given, it must be false. Predicate logic is the opposite: If I can't infer anything about "playsAirGuitar(mia)" from my axioms, it might be true or false. It's truth value is unknown. It's true in some model of the axioms, and false in others. The statement is independent of the axioms. Deductive logic assumes an open universe, Prolog a closed universe.
- rramadass 1y agoThis is called the Closed World Assumption (CWA) - https://en.wikipedia.org/wiki/Closed-world_assumption https://en.wikipedia.org/wiki/Closed-world_assumption Prolog’s Closed-World Assumption: A Journey Through Time - https://medium.com/@kenichisasagawa/prologs-closed-world-assumption-a-journey-through-time-a2392b654750 https://medium.com/@kenichisasagawa/prologs-closed-world-ass... Is Prolog really based on the closed-world assumption? - https://stackoverflow.com/questions/65014705/is-prolog-really-based-on-the-closed-world-assumption https://stackoverflow.com/questions/65014705/is-prolog-reall...
- scotty79 1y agoIt's not really false I think. It's 'no', which is an answer to a question "Do I know this to be true?" I think there should be a room for three values there: true, unprovable, false. Where false things are also unprovable. I wonder if Prolog has false, defined as "yes" of the opposite.
- cubefox 1y ago> It's not really false I think. It's 'no', which is an answer to a question "Do I know this to be true?" I don't think so, because in this case both x and not-x could be "no", but I think in Prolog, if x is "no", not-x is "yes", even if neither is known to be true. It's not a three-valued logic that doesn't adhere to the law of the excluded middle.
- IceDane 1y agoProlog is easily one of my favorite languages, and as many others in this thread, I first encountered it during university. I ended up teaching it for a couple of years (along with Haskell) and ever since, I've gone on an involuntary prolog bender of sorts once or twice a year. I almost always use it for Advent of code as well.
- shevy-java 1y agoBut I don't wanna!
- dunsany 1y agoLearn it now? I learned back in the 80s... and have since forgotten
- phforms 1y agoYou might have forgotten the language but I bet it must have had some influence on how you think or write programs today. I don’t think the value of learning Prolog is necessarily that you can then write programs in Prolog, but that it shifts your perspective and adds another dimension to how you approach problems. At least this is what it has done for me and I find that still valuable today.
- matltc 1y agoHah. Found this book back at my dad's this past winter: https://imgur.com/a/CyG1E2P https://imgur.com/a/CyG1E2P Had never heard of it before, and this is first I'm hearing of it since. Also had other cool old shit, like CIB copies of Borland Turbo Pascal 6.0, old Maxis games, Windows 3.1
- myth_drannon 1y agoClocksin is the standard Prolog textbook used in universities. I studied from the 5th edition.
- matltc 1y agoNice. Do you use Prolog much today? If so, when do you reach for it?
- myth_drannon 1y agoNo, just coming back to it for the intellectual curiosity, nothing more.
- fifilura 1y agoDeclarative languages are fantastic to reason about code. But the true power is unlocked once the underlying libraries are implemented in a way that surpassesthe performance that a human can achieve. Since implementation details are hidden, caches and parallelism can be added without the programmer noticing anything else than a performance increase. This is why SQL has received a boost the last decade with massively parallel implementations such as BigQuery, Trino and to some extent DuckDB. And what about adding a CUDA backend? But all this comes at a cost and needs to be planned so it is only used when needed.
- hunterpayne 1y agoLook into Futhark, its a pure FP language (based on ML, ick) that outputs CUDA.
- osm3000 1y agoI studied prolog back in 2014. It was used in AI course. I found it very confusing: trying to code A*, N-Queens, or anything in it was just too much. Python, in contrast, was a god-send. I failed the subject twice in my MSc (luckily passing the MSc was based on the total average), but did a similar course in UC Berkeley, with python: aced it, loved it, and learned a lot. Never again :D
- scotty79 1y agoIt's a query language for graph database. You can write A* and N-Queens in SQL, but why?
- hunterpayne 1y agoPerformance, far better performance. Same reason you ever use SQL. Prolog can do the same thing for very specific problems. PS Prolog is a Horn clause solver. You characterizing it as a query language for a graph database, well it doesn't put you in the best light. It makes it seem like you don't understand important foundational CS math concepts.
- scotty79 1y agoI have no idea why are you dissing query languages. Software that makes those work is immensely complex and draws on a ton of CS math concepts and practical insights. But maybe you don't understand that. I'm using SQL to do SQL things. And I'm sure when I somehow encounter the 1% of problems that prolog is the right fit for I'd be delighted to use it. However doing general algorithms in Prolog is as misguided as in SQL.
- hunterpayne 1y ago> I have no idea why are you dissing query languages. I'm not. I'm pointing out that saying a Horn clause interpreter is a graph query language indicates a fundamental misunderstanding on your part. Prolog handles anything you want to say in formal logic very well (at the cost of not doing anything else well). SQL on the other handle uses a completely different mathematical framework (relational algebra and set theory). This allows really effective optimization and query planning on top of a DB kernel. A graph DB query language on the other hand should be based upon graph theory. Which is another completely different mathematical model. I haven't been impressed by the work in this area. I find these languages are too often dialects of SQL instead of a completely different thing based upon the correct mathematical model. PS I used to write DBs. Discretion is the better part of valor here.
- baudaux 1y agoIs there a WebAssembly WASI version of swi prolog ?
- deleted 1y ago[deleted]
- jfmc 1y agoNot sure... Other Prologs compiled to WASM with very good performance is https://ciao-lang.org/playground/ https://ciao-lang.org/playground/ The same toplevel runs also from 'node' as well.
- baudaux 1y agoThanks. I will have a look. I would like to integrate one Prolog in exaequOS.
- scotty79 1y agoI'll never understand how it's a programming language not a graph database with query language. It's more MongoDb than Fortran.
- hunterpayne 1y agoBecause its more powerful than MongoDb or Fortran. The cut operator for instance gives it the ability to express things you just can't do in those other systems. The trade-off is that mastering the cut operator is a rare skill and only that one person who can do it can maintain the Prolog code. Compare that with MongoDb where even the village idiot can use it but with a huge performance cost.
- Jtsummers 1y agoI don't know about MongoDB and its query language, but wrt Fortran, it's unreasonable to say that Prolog is more powerful than Fortran (or vice versa). A more reasonable statement is that Prolog is more expressive than Fortran (though this gets fuzzy, we have to define expressiveness in a way that lets us rank languages). But the power of a language normally means what we can compute using that language. Prolog and Fortran both have the same level of "power", but it's certainly fair to say that expressing many programs is easier in Prolog than Fortran, and there are some (thinking back to my scientific computing days) that are easier to express in Fortran than Prolog.
- hunterpayne 1y agoI would say most programs are easier in Fortran. But there are things you can't express in Fortran but you can in Prolog. There is nothing like the cut operator in Fortran for example. They are very different animals.
- Jtsummers 1y agoYou seem to be confusing two different things: What is easily or natively expressed in the language, and what can be expressed in the language. You can create a logical equivalent of the cut operator in Fortran if you wanted to, but there's no native mechanism or operator to rely on. The languages possess the same computing "power", the difference is not in what they can compute which is your claim with "there are things you can't express in Fortran but you can in Prolog" (utter nonsense). Anything you can get a Prolog program to do, you can get a Fortran program to do (and vice versa).
- timonoko 1y agoFarts:
- marcelr 1y agowhat the fuck does this mean? are you saying you can’t comprehend prolog programs?
- Jtsummers 1y agoIt means that timonoko doesn't like to think and would rather ask grok to think for them and post weird comments about it here on HN. They've been doing this for a while.
- deleted 1y ago[deleted]
- timonoko 1y agoI recently asked @grok about Prolog being useless incomprehensible shit for anything bigger than one page: Professionals write Prolog by focusing on the predicates and relations and leaving the execution flow to the interpreter. They also use the Constraint Logic Programming extensions (like clpfd) which use smart, external algorithms to solve problems instead of relying on Prolog's relatively "dumb" brute-force search, which is what typically leads to the "exploding brain" effect in complex code. --- Worth mentioning here is that I wrote Prolog all on my own in 1979. On top of Nokolisp of course. There was no other functioning Prolog at that time I knew about. Thereafter I have often planned "Infinity-Prolog" which can solve impossible problem with lazy evaluation. I just learned from @grok that this Constraint Logic is basically what was aiming at.
- Jtsummers 1y agoHow many times are you going to "write" the same comment in one discussion?
- eatsleepmonad 1y agoI recently implemented an eagerly evaluated embedded Prolog dialect in Dart for my game applications. I used SWI documentation extensively to figure out what to implement. But I think I had the most difficulty designing the interface between the logic code and Dart. I ended up with a way to add "Dart-defined relations", where you provide relations backed dynamically by your ECS or database. State stays in imperative land, rules stay in logic land. Testing on Queens8, SWI is about 10,000 times faster than my implementation. It's a work of art! But it doesn't have the ease of use in my game dev context as a simple Dart library does.
- ioma8 1y agoWould you mind sharing your prolog dart lib?
- eatsleepmonad 1y agoUnfortunately it is closed source. My plan is to use it as (part of) the foundation for my game studio. Do you have a different use case? I would be open to sharing it on a project- or time-limited basis in exchange for bug reports and feature requests.
- sgt 1y agoThat's it, I'm convinced. Now I'm doing my next startup in Prolog.
- nrhrjrjrjtntbt 1y agoThats the spirit. Make sure someone else is paying.
- oigursh 1y agoHow many Prolog programmers does it take to change a lightbulb? No.
- burakemir 1y agoLearn Datalog Now!
- tomhow 1y agoPreviously: Learn Prolog Now - https://news.ycombinator.com/item?id=9246897 https://news.ycombinator.com/item?id=9246897 - March 2015 (72 comments) Learn Prolog now - https://news.ycombinator.com/item?id=1976127 https://news.ycombinator.com/item?id=1976127 - Dec 2010 (31 comments)
- evelant 1y agoMy prolog anecdote: ~2001 my brother and I writing an A* pathfinder in prolog to navigate a bot around the world of Asheron's Call (still the greatest MMORPG of all time!). A formative experience in what can be done with code. Others had written a plugin system (called Decal) in C for the game and a parser library for the game's terrain file format. We took that data and used prolog to write an A* pathfinder that could navigate the world, avoiding un-walkable terrain and even using the portals to shortcut between locations. Good times.
- lkuty 1y agoI only read the first 88 pages of Prolog Programming in Depth but I found it to be the best introductory book for programming in Prolog because it presents down to earth examples of coding like e.g. reading a file, storing data. Most other books are mainly or only focused on the pure logic stuff of Prolog but when you program you need more. Another way of getting stuff done would be to use another programming language with its standard library (with regex, networking, json, ...) and embed or call Prolog code for the pure logic stuff.