8 ms·
Swish: SWI Prolog Notebook
- helloiloveyou 7y agocoolproject('prolog-notebooks'). coolproject(X)
- ragebol 7y ago> coolproject('prolog-notebooks'). yes
- dependenttypes 7y ago> coolproject(X) This rule means that everything is a cool project.
- padraic7a 7y agoHuh, is SWI Prolog having a moment? I had always heard of Prolog as being obscure and overly academic. It's popped up a little bit recently however - the last place I heard of it in use is in the recently launched TerminusDB https://github.com/terminusdb?language=prolog https://github.com/terminusdb?language=prolog
- pgtan 7y agoProlog gives you backtracking for free and liberates you from loops and if's.
- antoineMoPa 7y agoAt the price of a couple of headaches. Most programmers need to reverse the way they were thinking about programming when learning Prolog.
- Jtsummers 7y agoWhich is probably a good thing. Learning only one or two modes of thinking is severely handicapping.
- colanderman 7y agoBacktracking and unification (logic variables). The latter builds on the former and is key to some of Prolog's amazing capabilities.
- OskarS 7y agoProlog does have that reputation, but it's undeserved. It's incredibly fun to both learn and develop in, and it's very enlightening to learn this alternate model of computation. Prolog is awesome.
- nuncanada 7y agoNo. It is not... The CUT operator is worse than Ruby's monkey patching for debugging and maintenance reasons... Prolog without CUT is awesome, but currently there is no way to have reasonable performance without it.
- tom_mellior 7y agoYou can very often rewrite uses of the cut like: foo(X, Y) :- some_condition(X), !, bar(Y, X). foo(X, Y) :- baz(X, Y). to: foo(X, Y) :- ( some_condition(X) -> bar(Y, X) ; baz(X, Y) ). and get the same performance and clearer code. There are really very few actually useful uses of the cut in modern Prolog code. But we have no good, free, current teaching materials, so people get stuck learning the old ugly and convoluted ways.
- superdisk 7y agoThe arrow uses a cut internally which renders it nonlogical and ruins any benefit you'd get from even writing Prolog. At that point you're just using Prolog as a quirky imperative language. Unfortunately since it's almost impossible to model ideas without stuff like the arrow, cut, or \+ (not) operators, writing actual pure logical Prolog programs that actually do interesting things is supremely difficult.
- gmfawcett 7y agoSo the arrow doesn't represent logical implication? As a non-native, I would have read that as a clause that always resolves to `baz(X, Y)` unless the implication holds (i.e., `some_condition(X)` is true). Isn't that logically consistent?
- Mathnerd314 7y agoIt doesn't particularly look like it's having a moment: https://trends.google.com/trends/explore/TIMESERIES/1572366600?hl=en-US&tz=360&date=today+5-y&q=%2Fm%2F05vpz,%2Fm%2F03j_q,%2Fm%2F0dsbpg6&sni=3 https://trends.google.com/trends/explore/TIMESERIES/15723666... Both Haskell and Prolog seem to run on a school-year cycle where search interest peaks a little before the end of the semester. Prolog's cycle is significantly more pronounced, suggesting the interest is indeed purely academic. Whereas Rust has been growing steadily and shows little seasonality. I'd say it's random chance, given X million programmers and Y million articles there's always somebody who will see a lot of Z topic. Terminus in particular seems to be an extension of work Gavin did during his postdoc, in particular the Dacura stuff mentioned here: http://aligned-project.eu/open-source-tools/ http://aligned-project.eu/open-source-tools/. He deleted the DQS repository for some reason but there's a mirror here: https://github.com/bozicb/dacura-1 https://github.com/bozicb/dacura-1.
- xvilka 7y agoInteresting, from Google trends, it seems that Haskell is very popular in China, compared to other regions. I wonder what can be the reason for this.
- Guthur 7y agoCompetitive advantage. By inflating the search results they'll encourage the competition to spend inordinate amounts of time learning cat theory and trying to get the compiler to understand their code. In the mean time they'll hack it together in Perl. Sorry for the inappropriate about at humour, I couldn't resist.
- gtycomb 7y agoConsider that fact that prime-minister of Singapore knows Haskell by now http://wadler.blogspot.com/2015/04/prime-minister-of-singapore-plans-to.html http://wadler.blogspot.com/2015/04/prime-minister-of-singapo... He is already quite good with C++ https://arstechnica.com/information-technology/2015/05/prime-minister-of-singapore-shares-his-c-code-for-sudoku-solver/ https://arstechnica.com/information-technology/2015/05/prime...
- 7thaccount 7y agoI saw the TerminusDB posts on the Prolog subreddit and some of their Medium posts, but don't understand it or how they can make money.
- LukeEF 7y agoWe are pushing out documentation (worked examples etc.) as fast as we can so hopefully it will be come more understandable. In terms of making money, we'll launch a hosted platform in the near future.
- 7thaccount 7y agoThanks! It does like look interesting. Somehow a combination of graph database and prolog? I'm trying to think what kind of customers you're looking for. Medical research? I know things like Prolog are common there for ontologies (think I said that right).
- LukeEF 7y agoYes - a graph database implemented in Prolog and Rust (the storage layer - better for nitty-gritty bit manipulation). We think it's a great general purpose DB with all sorts of interesting features. Cool stuff coming on the platform, so keep an eye out!
- 7thaccount 7y agoI'll meet an eye out! Thanks btw!
- LukeEF 7y agoSWI Prolog deserves a moment as it is amazing. Terminus uses it not because of some ideological position but as it is the best technology for the job.
- carapace 7y agoHere's a fun one: "Compiler Tutorial" by Robert Laing https://swish.swi-prolog.org/p/Compiler1.swinb https://swish.swi-prolog.org/p/Compiler1.swinb
- haolez 7y agoWhen I was in college, we had an internal joke that the simplest Prolog interpreter can be easily implemented in C: int main() { printf(“No\n”); return 0; }
- wwweston 7y agoPerhaps more appropriately called "Nolog."
- worldsayshi 7y agoSeems like this would be a more comprehensible starting point: https://swish.swi-prolog.org/example/examples.swinb https://swish.swi-prolog.org/example/examples.swinb
- mark_l_watson 7y agoThat is awesome. It has been a very long time since I have looked at Swish. Now it looks like a very good web based IDE. I used to use SWI Prolog a lot in the early days of the semantic web because I liked the SWI Prolog semantic web library.
- xvilka 7y agoIf anyone is interested in learning Prolog I can recommend two very good Prolog books: The Power of Prolog[1] and Simply Logical: Intelligent Reasoning by Example[2]. I also recommend visiting the Awesome Prolog list[3]. Worth checking also a very interesting extension of the Prolog - Probabilistic Prolog, aka ProbLog[4]. And modern ISO-compatible implementation in Rust language - Scryer Prolog[5]. [1] https://www.metalevel.at/prolog https://www.metalevel.at/prolog [2] https://book.simply-logical.space/ https://book.simply-logical.space/ [3] https://github.com/klaussinani/awesome-prolog https://github.com/klaussinani/awesome-prolog [4] https://github.com/ML-KULeuven/problog https://github.com/ML-KULeuven/problog [5] https://github.com/mthom/scryer-prolog https://github.com/mthom/scryer-prolog
- 7thaccount 7y agoI didn't know about the second link. Thanks!
- samuell 7y agoFor an awesome video showcasing a bit of the real power of Prolog, you need to check (if you haven't already) this Strangeloop talk: "Production Prolog" by Michael Hendricks https://youtu.be/G_eYTctGZw8 https://youtu.be/G_eYTctGZw8
- joshmarlow 7y agoThat is an awesome talk. I'll second the recommendation.
- 7thaccount 7y agoI think I started watching this a few years ago and never finished it which is sad because you are correct that this was fascinating. Maybe I'll give Prolog another go.
- raphinou 7y agoI have learned some prolog, and I really enjoyed it. The only problem I encountered is that I had a hard time moving to real world practical uses of the language. I enjoyed the language for the exercises I had in my learning resources, but I never found a problem I could use it for myself.
- Jtsummers 7y agoPotential use-case for you: I prototyped (but did not fully implement, no management support) test case generation using Prolog. In our case, it was (grossly simplified) a messaging system with a well-defined protocol running in an embedded device. When some message was sent, we anticipated a response back within some time window with some content based on what was initially sent (NB: This is only one of many potential scenarios). Let's say that some complex computation is happening on the remote end, based on the series of messages transmitted you eventually expect a response that will be the result of computation on those inputs. You could manually calculate what that response should be, which fundamentally limits how many test cases you can generate and potentially leads to biased tests (assumptions of system behavior or design by the testers), or you can do it automatically. In our case, Prolog (or something like it) could be used to model the system and generate arbitrary test cases for us. It acts as the oracle (if you're familiar with property-based testing, this is where I was heading with my effort). You can now use Prolog to generate arbitrary input sequences with a known output (depending on the fidelity of your model to the spec) and generate test sequences for your system and compare the output. And if your Prolog model is sufficiently developed, it can also be used for other development/testing efforts. If you get some response, what series of inputs may have produced it (this may be computationally infeasible, but maybe you know or can assume some of the inputs to constrain the search space). Or if your manual testing (throwing bodies at the problem) results in unexpected behavior, you can check what the model produces using the recorded inputs. Perhaps your system performs correctly, but the tester or user's mental model was incorrect. Or perhaps they found an actual implementation error. A nice thing about using Prolog, vice using a second "reference" implementation in a more traditional language like C++, is that the Prolog model is often much simpler than the full system being developed, whereas (for us) a reference implementation would've been of comparable size. In our case, it could be the difference between 10k lines of code versus 100k lines of code. The downside of this Prolog approach is performance, a C++ reference implementation may be able to run in real-time (or close enough) and could be directly substituted for the unit under test to verify other aspects of the test rig or system. Or, in a multi-system test, a reference implementation could be used in place of "real" remote systems (due to cost or other constraints).
- juststeve 7y agosite is down: 504 Gateway Time-out