Can be used as supplemental text in courses in computational linguistics natural language processing. Convert currency. Add to Basket. Condition: new. Seller Inventory think More information about this seller Contact this seller. Condition: New. Never used!. Seller Inventory P Michael A. Covington ; Donald Nute ; Andrae Vellino. Publisher: Longman Higher Education , This specific ISBN edition is currently not available.
View all copies of this ISBN edition:.
Synopsis Appropriate for courses in artificial intelligence, computer science, logic programming, and expert systems. Iterative algorithms can be implemented by means of recursive predicates. If a proof for that goal can be found, the original goal i. If no proof can be found, the original goal succeeds. This kind of negation is sound if its argument is "ground" i.
- Introduction to Programming in Prolog.
- Microrobotics: Methods and Applications.
- Prolog programming in depth!
- The South Stoa and Its Roman Successors;
- Prolog Programming in Depth.
- The Global Auction: The Broken Promises of Education, Jobs, and Incomes?
Soundness is lost if the argument contains variables and the proof procedure is complete. In particular, the query? In Prolog, loading code is referred to as consulting. Prolog can be used interactively by entering queries at the Prolog prompt? If there is no solution, Prolog writes no. If a solution exists then it is printed. If there are multiple solutions to the query, then these can be requested by entering a semi-colon ;. There are guidelines on good programming practice to improve code efficiency, readability and maintainability.
Any computation can be expressed declaratively as a sequence of state transitions. As an example, an optimizing compiler with three optimization passes could be implemented as a relation between an initial program and its optimized form:. The quicksort sorting algorithm, relating a list to its sorted version:. A design pattern is a general reusable solution to a commonly occurring problem in software design.
In Prolog, design patterns go under various names: skeletons and techniques,   cliches,  program schemata,  and logic description schemata. A higher-order predicate is a predicate that takes one or more other predicates as arguments.
To convert solutions from temporal representation answer substitutions on backtracking to spatial representation terms , Prolog has various all-solutions predicates that collect all answer substitutions of a given query in a list. This can be used for list comprehension. For example, perfect numbers equal the sum of their proper divisors:.
Steels: Metallurgy and Applications, Third Edition
As another example, the predicate maplist applies a predicate P to all corresponding positions in a pair of lists:. For programming in the large , Prolog provides a module system. The module system is standardised by ISO. There is a special notation called definite clause grammars DCGs.
Most popular documents in this category
Most notably, the rewriting equips the predicate with two additional arguments, which can be used to implicitly thread state around, [ clarification needed ] analogous to monads in other languages. DCGs are often used to write parsers or list generators, as they also provide a convenient interface to difference lists.
Prolog is a homoiconic language and provides many facilities for reflection. Its implicit execution strategy makes it possible to write a concise meta-circular evaluator also called meta-interpreter for pure Prolog code:.
For example, Sterling and Shapiro present a meta-interpreter that performs reasoning with uncertainty, reproduced here with slight modifications:  : This interpreter uses a table of built-in Prolog predicates of the form  : Given those, it can be called as solve Goal, Certainty to execute Goal and obtain a measure of certainty about the result. Pure Prolog is based on a subset of first-order predicate logic , Horn clauses , which is Turing-complete.
Turing completeness of Prolog can be shown by using it to simulate a Turing machine:. This machine performs incrementation by one of a number in unary encoding: It loops over any number of "1" cells and appends an additional "1" at the end. Example query and result:. This illustrates how any computation can be expressed declaratively as a sequence of state transitions, implemented in Prolog as a relation between successive states of interest. The ISO Prolog standard consists of two parts.
Using the Prolog programming language
It has clarified aspects of the language that were previously ambiguous and leads to portable programs. There are three corrigenda: Cor. For efficiency, Prolog code is typically compiled to abstract machine code, often influenced by the register-based Warren Abstract Machine WAM instruction set. These include clause binarization and stack-based virtual machines. Prolog systems typically implement a well-known optimization method called tail call optimization TCO for deterministic predicates exhibiting tail recursion or, more generally, tail calls: A clause's stack frame is discarded before performing a call in a tail position.
Therefore, deterministic tail-recursive predicates are executed with constant stack space, like loops in other languages. Finding clauses that are unifiable with a term in a query is linear in the number of clauses. Term indexing uses a data structure that enables sub-linear-time lookups. Most Prologs only use indexing on the first term, as indexing on all terms is expensive, but techniques based on field-encoded words or superimposed codewords provide fast indexing across the full query and head.
This tends to yield very large performance gains when working with large corpora such as WordNet.
Subgoals encountered in a query evaluation are maintained in a table, along with answers to these subgoals. If a subgoal is re-encountered, the evaluation reuses information from the table rather than re-performing resolution against program clauses. Tabling is a space—time tradeoff ; execution time can be reduced by using more memory to store intermediate results.
During the Fifth Generation Computer Systems project , there were attempts to implement Prolog in hardware with the aim of achieving faster execution with dedicated architectures. Although Prolog is widely used in research and education, Prolog and other logic programming languages have not had a significant impact on the computer industry in general. Software developed in Prolog has been criticised for having a high performance penalty compared to conventional programming languages. In particular, Prolog's non-deterministic evaluation strategy can be problematic when programming deterministic computations, or when even using "don't care non-determinism" where a single choice is made instead of backtracking over all possibilities.
Cuts and other language constructs may have to be used to achieve desirable performance, destroying one of Prolog's main attractions, the ability to run programs "backwards and forwards". Prolog is not purely declarative: because of constructs like the cut operator , a procedural reading of a Prolog program is needed to understand it. As a result, many practical Prolog programs are written to conform to Prolog's depth-first search order, rather than as purely declarative logic programs.
Various implementations have been developed from Prolog to extend logic programming capabilities in numerous directions. These include types , modes, constraint logic programming CLP , object-oriented logic programming OOLP , concurrency, linear logic LLP , functional and higher-order logic programming capabilities, plus interoperability with knowledge bases :. Prolog is an untyped language. Attempts to introduce types date back to the s,   and as of there are still attempts to extend Prolog with types. The syntax of Prolog does not specify which arguments of a predicate are inputs and which are outputs.
Constraint logic programming extends Prolog to include concepts from constraint satisfaction. It is suited to large-scale combinatorial optimisation problems  and is thus useful for applications in industrial settings, such as automated time-tabling and production scheduling.
Prolog programming in depth / Michael A. Covington, Donald Nute, André Vellino - Details - Trove
Most Prolog systems ship with at least one constraint solver for finite domains, and often also with solvers for other domains like rational numbers. Flora-2 is an object-oriented knowledge representation and reasoning system based on F-logic and incorporates HiLog , Transaction logic , and defeasible reasoning. Logtalk is an object-oriented logic programming language that can use most Prolog implementations as a back-end compiler.
As a multi-paradigm language, it includes support for both prototypes and classes. Support for other platforms was added, and a second version was released in Cedar is a free and basic Prolog interpreter. This provides a new platform to programming in Prolog through ActionScript. The name Prolog was chosen by Philippe Roussel as an abbreviation for programmation en logique French for programming in logic. It was created around by Alain Colmerauer with Philippe Roussel, based on Robert Kowalski 's procedural interpretation of Horn clauses.
- Steels: Metallurgy and Applications, Third Edition.
- Top Authors;
- Mine Is the Night.
It was motivated in part by the desire to reconcile the use of logic as a declarative knowledge representation language with the procedural representation of knowledge that was popular in North America in the late s and early s. David H. European AI researchers favored Prolog while Americans favored Lisp , reportedly causing many nationalistic debates on the merits of the languages. Pure Prolog was originally restricted to the use of a resolution theorem prover with Horn clauses of the form:.
Pure Prolog was soon extended, however, to include negation as failure , in which negative conditions of the form not B i are shown by trying and failing to solve the corresponding positive conditions B i. Subsequent extensions of Prolog by the original team introduced constraint logic programming abilities into the implementations. Prolog has been used in Watson. Prolog is used for pattern matching over natural language parse trees. The developers have stated: "We required a language in which we could conveniently express pattern matching rules over the parse trees and other annotations such as named entity recognition results , and a technology that could execute these rules very efficiently.
We found that Prolog was the ideal choice for the language due to its simplicity and expressiveness. From Wikipedia, the free encyclopedia. This article is about the programming language. For the narrative device, see Prologue. For other uses, see Prologue disambiguation. Main article: Prolog syntax and semantics. Head :- Body. Hello World!
Main articles: Higher-order logic and Higher-order programming. Further information: Comparison of Prolog implementations. Main article: Term indexing. Programming in Prolog. Prolog programming for artificial intelligence 4th ed. Natural language processing for Prolog programmers. Englewood Cliffs, N.
Foundations of logic programming. Berlin: Springer-Verlag.
Communications of the ACM. Journal of Automated Reasoning. Building expert systems in Prolog. Lee 19 January Foundations of Programming Languages. Pereira ; Stuart M. Shieber Prolog and Natural Language Analysis. Association for Logic Programming. See also Watson computer. International Organization for Standardization , Geneva. BoD — Books on Demand.