Peter directed me to this paper of his, in reply to a question following his very interesting post regarding the history of Prolog.
If you are interested in how Prolog is implemented (WAM and the like), you should definitely read this paper. But even if the implementation details don't really interest you, the paper is worth a look, since it gives insights on the history of Prolog systems, and some useful clues about the semantics of Prolog.
The discussion of tail call optimizations (called "last call optimization" in the paper) is interesting. From what I remember (it was a while ago that I checked) Prolog doesn't mandate this. Strange for a language so recursion oriented.
Figure 1 showing the correspondence between logical and imperative concepts, is used in the presentation of the WAM, but is also a nice summary of the different semantic uses of the major Prolog constructs.
Integrating constraint solving inside Prolog is also discussed.
Posted to logic/declarative by Ehud Lamm on 10/24/03; 3:34:56 PM