What is Prolog and what programming paradigm does it use?
Prolog is a logic programming language that uses a declarative paradigm: a program is defined as a set of facts and rules, and computation is initiated by running a query over those relations. It is rooted in first-order logic and remains the most popular logic programming language available, with both free and commercial implementations.
Who created Prolog and when was it developed?
Prolog was created around 1972 by Alain Colmerauer and Philippe Roussel, members of the Artificial Intelligence Group at the Faculty of Sciences of Luminy, Aix-Marseille II University in France. The first implementation was an interpreter written in Fortran by Gerard Battani and Henri Meloni.
What does the name Prolog stand for and who chose it?
The name Prolog was chosen by Philippe Roussel, at the suggestion of his wife, as an abbreviation for Programmation en logique, which is French for "programming in logic".
How was Prolog used in IBM Watson?
Prolog was used in Watson for pattern matching over natural language parse trees. The Watson developers stated they needed a language for conveniently expressing pattern matching rules over parse trees and named entity recognition results, and found Prolog ideal due to its simplicity and expressiveness. Watson also used Java, C++, and ran on SUSE Linux Enterprise Server 11 with the Apache Hadoop framework.
What is the Warren Abstract Machine and how does it relate to Prolog?
The Warren Abstract Machine is an influential abstract instruction set for compiling Prolog, created by David H. D. Warren. Warren first built the DEC-10 Prolog compiler in collaboration with Fernando Pereira, then generalised those ideas into the Warren Abstract Machine, which went on to shape how Prolog is compiled across many subsequent implementations.
What are the main limitations of Prolog in industrial software development?
Most Prolog applications are small by industrial standards, with few exceeding 100,000 lines of code. Key obstacles include incompatible module systems across implementations, portability problems between Prolog compilers, and a performance penalty compared to conventional languages, particularly when non-deterministic evaluation is applied to deterministic computations.