Procedural programming languages, such as FORTRAN, Pascal, and C, expect the programmer to build a representation of the solution to a problem using a model of the execution process of a computer. The goal of logic programming is to provide a higher level formalism, in which the solution is represented using a formal representation that was in use before computers were invented: human reasoning. The present volume starts with an explanation of how logic may be used as a programming language, and then explains the practical limitations that at present restrict logic programmers to the use of the subset of logic embodied in the Prolog programming language. Enhancements to Prolog that compensate for the weakness of its underlying logic, but compromise the purity of the language are then introduced. Most Prolog systems add to the logical core of the language a bewildering variety of extra features for procedural tasks such as input/output. The second part of the book presents some of the most common features, including facilities that are common to all Prologs. There is also an account of more abstruse topics such as garbage collection. The third part of the volume is concerned with programming style. Its principal aim is to show that despite the illogicalities in Prolog, a number of design criteria are available that conform to the principles of logic programming. Efficiency of programs is also considered at length. An approach to debugging Prolog programs is discussed and there is an extended example showing how an application is developed.Dodd, Anthony is the author of 'PROLOG; A Logical Approach' with ISBN 9780198538219 and ISBN 0198538219.