7 ms·
The Prolog Story
- Mark_B 16y agoSo, in other words, the customer's system can now be described as being "a client/server application written completely in [not Prolog] with SQL Server behind it except for this ONE piece - THAT one is in Prolog!" Next question - Who's going to maintain it? I mean, props for using Prolog to tackle the complex problem and save gobs of money/time, but doesn't an approach like this seem _really_ risky?
- jim_lawless 16y agoThis story sort of reminds me of another that was reported here. See the link referred to in http://news.ycombinator.com/item?id=756873 http://news.ycombinator.com/item?id=756873
- Maro 16y agoLearning Prolog was one of the most exciting things about getting a C.S. degree. It's vastly underrated, though admittedly not very useful in real-life.
- fogus 16y agoI once worked with a guy who was using Prolog to develop a system that devised optimal cargo hold layouts for shipping barges. Seems fairly "real-life" to me.
- barrkel 16y agoOptimal packing problems are fun 1-hour programming contest fodder - so many problems that you might solve in Prolog are trivially written imperatively or functionally as combinatorial or permutational recursive searches with pruning - but they are such a small kernel of a real-world application that I don't think they justify the complexity of linking in another language, runtime, etc. Where you're dynamically building up facts and clauses, and you need more general solving logic at run time, then I think Prolog is more warranted. But that's a smaller niche, IMO.
- scott_s 16y agoI think you're misusing the word "trivially" by putting it in front of "combinatorial or permutational recursive searches with pruning."
- gaius 16y agoTrivially in this context means the program can be written without discovering a new algorithm first.
- scott_s 16y agoConsidering that it still requires a significant amount of code that the Prolog solution would not require, and that code will have to be tested and debugged, I don't consider it "trivial" in any way I use the word. If we were talking theory, maybe, but we're talking implementation. Consider that we know, and have known for some time, proper ways to manage dynamic memory. We still consider doing it correctly in practice not trivial and consider automatic garbage collection a productivity win.
- arethuza 16y agoFrom what I can remember of being an academic researcher (it was a while ago) the term "trivial" was indeed used to indicate something that wasn't of any real research interest. This does indeed annoy people who put a lot of work into building complex systems that actually do useful stuff.
- scott_s 16y agoI do systems research. We only use "trivial" if something is so easy as to be an afterthought. If you're talking theory, then, fine, solved problems are "trivial." But we're not talking theory.
- pmiller2 16y agoI'm in grad school right now. That sounds about right to me. "Trivial" means "someone already did it, while "easy" means "my graduate student is working on it." :-)
- Maro 16y agoI meant real-life applications are relatively few.
- 10ren 16y agoFor every thousand hacking at the leaves of evil, there is one striking at the root.
- arethuza 16y agoSo that's what cut is for!
- jm4 16y agoThe book Seven Languages in Seven Weeks has a chapter on Prolog. There is an interview in there with a guy who was doing research on dolphins and used Prolog to build a dolphin simulator. As they learned new things about the dolphins they would add "facts" to the simulator and used it to try to discover new things. They could also use it for "debugging" training problems. He had a story about a dolphin who would apparently ignore a specific instruction and just sink down into the tank. They were able to use the simulator to figure out that the problem was not with the dolphin, but with both the instruction given and the surrounding environment at the time they would give the instruction. It turned out the dolphin was actually "following the rules", but the trainers failed to see it. He also talks about using Prolog to build a scheduling system. Access to trained dolphins is a precious resource and it was important to find the optimal schedule for research. With a handful of facts and rules, Prolog was able to discover it for them. Pretty neat stuff.
- rick_2047 16y agodo you have any links or resources for this? I would really like to read about this more.
- silentbicycle 16y agoIf you want to learn about Prolog, the best book IMHO is _The Art of Prolog_ by Sterling and Shapiro. The newer edition is out of print and expensive (but worth it!), the previous edition is more like $6 and will give you a good taste. _Programming in Prolog_ by Clocksin & Mellish is a pretty straightforward overview of the language, but TAoP really gets at Prolog's real potential. I also liked _Clause and Effect_, which is somewhat like a "Little Schemer" for Prolog, with a couple fairly substantial projects at the end. "Learn Prolog Now" (http://www.learnprolognow.org/ http://www.learnprolognow.org/) is free online, but a bit basic. CTM has a great chapter on relational programming and Prolog, too - Peter Van Roy worked on Aquarius Prolog (http://www.info.ucl.ac.be/~pvr/Peter.thesis/Peter.thesis.html http://www.info.ucl.ac.be/~pvr/Peter.thesis/Peter.thesis.htm...), and he also follows up with constraint programming. I highly recommend using a Prolog with constraint programming libraries, because it will make a big difference when Prolog's default behavior is too naive. I would recommend learning Prolog, because it's sufficiently different from every other language that it will change the way you think, and even if you never use it in production, it's an excellent prototyping language. As a bonus, learning Prolog will help with Erlang, and vice versa. (Erlang was initially a DSL on SICStus Prolog, and many Prolog idioms came along.)
- dejv 16y agoI like this sentence: We cut the cost/time of this implementation by 90% or more, not by coding more quickly, but by thinking more clearly. I think that this is valid for most projects in any language.
- sophacles 16y agoI've always been a fan of the "Don't just do something! Sit there." approach to work. Not only do I sometimes find really clever ways around a problem, or weird issues that wouldn't immediately be apparent, I also save a whole bunch of potential RSI :) Added benefit: When it is time to start coding, you can amaze your coworkers by brain dumping a decently coded solution at typing speed.
- rdtsc 16y agoThat's one of the most understated advice. Quite often managers like to see lots of code, or developers have screwed up incentives and get payed by the lines of code. If a manager walks by, their heart gladdens when they see you banging on the keboard like mad -- to them that equals to "work being done". They fail to realize that sometimes that equals to "more un-necessary garbage added to the existing pile of code" that will eventually make the product unstable, brittle and hard to maintain. Sitting there with a notepad and a pencil thinking about the problem is when I find I actually solve the difficult problems not when I type furiously at a keyboard.
- dkersten 16y agoToo right. One day myself and another guy were debugging a piece of code by staring at it, figuring the logic out in our heads and pitching theories back and forward. The boss walked past, saw we were sitting there "doing nothing" and told us to do some work... ugh!
- sophacles 16y agoI have no idea how this works, but it does: when sharing a screen with someone and doing work: if one of you is pointing at something code-looking, the boss reverts to thinking you are working. This works even if you are discussing non-work things... its not content they care about but form :/
- tlack 16y agoDoes anyone else have any war stories about using Prolog in their day jobs? It's a tool I'm always on the look out to use to simplify some of my more complex tasks, but so far I haven't had any luck in that regard.
- ciex 16y agoI am currently learning Prolog as part of my artificial intelligence class and as far as I know it's used in many contexts in ai research in my uni.
- porlw 16y agoI once had a huge pile of Oracle PL/SQL to take care of, which was written for performance rather than ease of maintenance and used a lot of session level global data. PL/SQL doesn't give you nice stack traces when you have an error, I just knew the entry point and the place where the error occurred. Even knowing the data coming in to the entry point, use of the globals meant that you often couldn't know for sure what route the code would take. I wrote a primitive PL/SQL parser (in Perl) to turn the call tree into Prolog rules, and then used Prolog to give me the possible routes between the entry point and the error location, making debugging much easier.
- tlack 16y agoWow, that sounds like a serious undertaking. How much PL/SQL are we talking about here? How long did writing the Perl -> Prolog solution take?
- porlw 16y agoI think it was about 60Mb of source, around 1000 packages and stand-alone procs. Basically the perl pulled a list of scoped function names from the DDL, did a text index on the executable code, and searched the index for references to those functions, creating a list of [from.function, to.function] pairs that I fed into prolog.
- MichaelSalib 16y ago
- ollysb 16y agoIt was the similarity to prolog that first got me excited about erlang, I thought I'd found a language that used the same principles that could be used in the real world. Then I discovered there was no backtracking...
- stralep 16y agoIs there some up-to-date implementation of micro-Prolog? I find its syntax nice and lispish :) [edit]s/it's/its/
- scscsc 16y agoOk, so Prolog is nice. We know that already. But the story lacks any real content... It's really just: we used Prolog, it seemed to be a lot faster to code and the customer was happy.
- mark_l_watson 16y agoI used to use Prolog a lot on R&D projects at SAIC but since becoming a consultant, few customers have wanted work done in Prolog (it has been about 5 years since anyone has paid me to do Prolog). Prolog is awesome for some types of problems like graph operations, ad-hoc rule systems, planning, etc. If you want to play/learn, I would recommend Swi-Prolog. Jan Wielemaker does a great job writing and maintaining Swi-Prolog. The semantic web libraries and other Swi-Prolog libraries are very good stuff!
- tom_b 16y agoThanks for weighing in - I am a somewhat frequent visitor to your blog and websites. This type of discussion (eg, using uncommon or less well-known languages to be more productive or reason about an approach to a problem domain) comes up here on Hacker News frequently. I have been searching for new work opportunities that would involve more freedom in programming language choice (specifically allowing me, as the developer, to explore tools like Prolog, Lisp, and Ruby as appropriate). Sadly, this has been somewhat fruitless in my geographic region. There is a (probably well-founded) desire on the part of companies to use what we can refer to as "lowest common denominator" tools (Java, C#, Oracle, MS SQL Server) with the occasional upstart using Ruby/Rails. When I say LCD tools, I don't mean to denigrate those languages/platforms, merely point out that companies seem more comfortable knowing that there is a large pool of potential programmers available with those skills. PG has weighed in on the side of starting your own company and using more powerful languages as a competitive advantage (the whole blub/magic of Lisp set of essays). It seems that few companies see programming language as competitive advantage or (based on your comment) be interested in hiring consultants such as yourself to implement higher level software that leverages these uncommon languages. I'm curious - have you had projects where you felt that Prolog or Lisp represented a "better" choice than Java or Ruby but had customer requirements that specified language choice upfront? Have you "pitched" Prolog or Lisp to customers, maybe saying something like "ah, using Prolog here would require only 20 hours of my dev/consultant time, but using Java will require an 80 hour solution"? I'm quite interested in using Prolog, Scheme, or Lisp at the "day job" so hearing any of your thoughts might help better prepare my own internal pitches . . .
- 16y ago
- travem 16y agoI've used Drools a fair bit in my current job but I've never learnt much about prolog. Can any one summarise where prolog would work better or provide additional features?
- agbell 16y agoAre there things prolog can do that embedded solvers cannot? In .net, solver foundation, http://code.msdn.microsoft.com/solverfoundation http://code.msdn.microsoft.com/solverfoundation , is a great fit for solving from a set of rules. And I believe most languages can embed some sort of rules optimizing engine.
- dws 16y agoGreat takeaway quote: "Don't be the person who only has a hammer."