I love Prolog, to the point of having taken part in the Portuguese university national logic championship back in the 90's. On our degree, we had three logic programming classes, starting from logic programming as pure math all the way to deep Prolog exercises. I didn't know there were Logic championships using Prolog!
You impress me more each day, pjmlp! I found that these kinds of languages make a LOT more sense after learning some logic , specially relational logic, to the extent that it's essentially the same thing. But understanding these few lines takes me more time than writing it in C, Java, PHP etc I'm still only a beginner at Prolog, but that's what I enjoy about it: it's an entirely different way of tackling problems that really stretches my brain, not just new syntax on the same old paradigm that I already know.
Something tells me that it would probably be easier if this was your first programming language. Actually I expect that some would find this declarative style a lot more intuitive and natural. But when you've spent many years writing imperative code it feels so alien.
It reminds me of the first time I attempted to write Verilog, it's hard to break the mold and change the way you think about the flow of a program and how you construct algorithms. Eventually it clicked for me and Verilog though, so I expect with enough dedication one could do the same with Prolog. I don't think working with numbers is a strong side of Prolog. Quicksort in Haskell is also 3 lines, but it's totally readable.
I can make use of functional programming in my daily life, but logic? But think of the Zebra puzzle. BTW, I hate Prolog too. I agree that is hard to think in prolog, formulating the problem as logic rules is not natural for us after we done imperative programming. I imagine this is true on small problems that are popular in education but in a real world scenario a hard problem that is suitable for prolog would be much harder to do it in C or other imperative language, and probably adding new rules would be easier in prolog.
An Introduction to Natural Language Processing Through PROLOG (Learning About Language)
Some problems are harder to express in Prolog than in conventional imperative logic , but then there are some problems that are far, far easier to solve in Prolog. You can learn prolog at more than one university in the world. Sure, but some courses are taught in more or less enjoyable ways. I've seen a few contalks about logic programming, read a few articles, and aside from the intellectual curiosity in itself I can see that it is very elegant in certain circumstances although I lack the hands-on experience to feel what those circumstances are.
Since doing a whole program in prolog isn't really practical for me, is there any way to use the logic programming paradigm in mainstream programming languages to deal with specific problems that fit it? The point of Prolog as a practical logic programming language really is that it is portable accross Prolog implementations based on ISO Prolog and maybe prolog-commons API compatibility. If you're using a Prologish tool a Java framework, say that is not quite Prolog, then you're loosing the compatibility for very little gain IMHO.
Integration with a relational DB, itself being based on logic, would be very different. Most Prologs have APIs to map tables to predicates. If you replace Prolog with SQL - does it make more sense? Yes, and I missed it because I was thinking in terms of "hmm, I wonder if there are any points in my client-side code-base that could be cleaned up by using logic programming?
Yes, for example is easy to embed Prolog code in Common Lisp by using a suitable library.
For example the LispWorks implementation includes a full Prolog package. Racket should also allow very easy mixing of Prolog source with the rest of the project, since Racket was designed to support different languages at once. It's not brilliant but at that time it did help me implement quite complex agent behavior within a multi-agent environment.
You can use embedded Prolog to implement type inference in your compiler. You can also use Datalog to get started. It's the non turing-complete version of Prolog. You can not create facts in rules for example. The best know Datalog Database is Datomic which you can use in the Java ecosystem but there is also pyDatalog for Python, which is really quite nice. Vosporos on Dec 5, It seems we have come full circle the Erlang VM was originally written in Prolog.
Thanks for the hint, I've updated the URL to point to the new version. I don't know if this is just coincidence, but this blog post is fantastically similar to another  on Prolog, down the the same quotes, and the same example, though different code. Another excellent resource for learning Prolog is the book "The Art of Prolog.
I read it recently and I can't recommend it enough. Even if you aren't really interested in Prolog, it is a must read. The Prolog one turned out to be the shortest. It was really interesting! You will pick up the few rules very quickly.
Let us transform the Socrates example from earlier into an actual Prolog program and analyse what is happing inside the compiler. Yeah, and no. This is mentioned way after the entire introduction, after the reader has already given up on trying anything with prolog. Is anyone reading this aware of any work on logic programming in the large as in efforts that are harnessing the fact that answerset programming avoids committed choice and so enables us to write reliable tractable programs, but aims to make that possible in teams or in distributed settings?
I haven't encountered anything across answer set programming in the large as you put it. It is still pretty academic and mainly used for solving puzzle and optimization problems. And yet declaring all business logic was once the way that all decisions would be encoded! Looking at this from a more general perspective of the Symbolic AI approach I would say it had its days. Data driven systems are proving to be a lot more powerful and easy to build. I remember I used to spend ages trying to encode my problems in AnswerSet or AgentSpeak and come up with all the rules.
It never worked! Also work that tackles industry things like testing your logic programs? I know how to code in Prolog. How can I take profit of it, apart from my academic undergraduate interests? Can I build something in particular, can I look for specific jobs?
Interactive Prolog Guide first edition If you prefer the structure of the original Interactive Prolog Guide, it is still available at least for sometime. There is a navigation bar at the top and bottom of each page that can be used to navigate through pages. Each page of this guide has the following schema:.
Tips: You can hide the Navigation and Location Toolbars in your browser to enlarge the visible area.
You will not need these gadgets to navigate through this guide. Do not forget to bookmark this page for easy future access. I really appreciate all additional supporters.
I am also grateful for all encouraging e-mails sent to me during the development of the Guide. I appreciate all e-mails expressing your opinion, comments, suggestions, corrections and wishes about the Guide. We have just asked the engine a question, and it automatically bound a value to our variable X! This process of matching variables with items is called unification and is precisely where logic programming has its strengths. The assignment statement is fundamental to most imperative programming languages. Hence we are using the term unification : the process of being united or made into a whole.
We can find applications of unification also in imperative languages where it is typically used to enable type inference.
An Introduction to Logic Programming through Prolog - Download link
Hence both arguments in the first example are the same atom Prolog returns true and false in the second case. Hint: Most constructs in Prolog use prefix syntax by default. Well, that is an easy one. Both terms are variables, of course, they unify with each other depending on your Prolog implementation you get true back.
- Other CLP-related Sites!
- The Lawyer, The Ghost and The Cursed Chair;
When Prolog resolves queries to come up with a conclusion, it tries to unify terms. Therefore a possible definition could be:. Two terms unify if they are the same term or if they contain variables that can be uniformly instantiated with terms in such a way that the resulting terms are equal.
Hitherto we have only considered basic terms such as atoms, variables, integers and floating point numbers as arguments for our programs. However, in Prolog, like in other logic programming languages, the most common data-structure is the list. Lists in Prolog are a special case of terms. The syntax is identical to Python, they start and end with square brackets, and a comma separates each list item. Here is a simple list:. Prolog provides a special facility to split the first part of the list called the head away from the rest of the list known as the tail.
For example, consider the following. The unification here succeeds, H is bound to the first item in the list and T to the remaining list. Prolog provides a bunch of handy operations for list manipulation such as append, flatten reverse etc.