This video holds some ideas. Eric Normand is an experienced functional programmer, trainer, speaker, writer, and consultant on all things FP. He started writing Lisp in and is now a Clojure expert, producing the most comprehensive suite of Clojure training material at PurelyFunctional. He has a popular Clojure newsletter and blog. He also consults with companies to use functional programming to better serve business objectives. You can find him speaking internationally at programming conferences.
Receive a weekly email to inspire functional programmers. Subscribe for Free. Uncle Bob gives a brief history of programming paradigms. Here are the ones he mentions: Modular Programming Structured Programming Object Oriented Programming Functional Programming His perspective was that programming paradigms are generally subtractive. Perspective is worth 80 IQ points. Aspect-oriented programming. What does it remove? The mixing of concerns. Concatenative programming A concatenative programming language is a point-free programming language in which all expressions denote functions and the juxtaposition of expressions denotes function composition.
Explicit arguments to functions point-free! Constraint programming. Logic programming. Much like constraints, it removes the explicit steps to execute. Array programming.
The distinction between scalar and vector quantities. Language-oriented programming. General purpose programming languages. One more. Event-driven programming. For example, it provides a natural representation for the common-sense laws of cause and effect, as formalised by both the situation calculus and event calculus. It has also been shown to correspond quite naturally to the semi-formal language of legislation. In particular, Prakken and Sartor  credit the representation of the British Nationality Act as a logic program  with being "hugely influential for the development of computational representations of legislation, showing how logic programming enables intuitively appealing representations that can be directly deployed to generate automatic inferences".
The programming language Prolog was developed in by Alain Colmerauer. Colmerauer was working on natural language understanding , using logic to represent semantics and using resolution for question-answering. During the summer of , Colmerauer and Kowalski discovered that the clausal form of logic could be used to represent formal grammars and that resolution theorem provers could be used for parsing. They observed that some theorem provers, like hyper-resolution, behave as bottom-up parsers and others, like SL-resolution , behave as top-down parsers.
- Delivering Performance in Food Supply Chains (Woodhead Publishing Series in Food Science, Technology and Nutrition)?
- Listening to Music.
It was in the following summer of , that Kowalski, again working with Colmerauer, developed the procedural interpretation of implications. It also became clear that such clauses could be restricted to definite clauses or Horn clauses , where H , B 1 , Kowalski's procedural interpretation and LUSH were described in a memo, published in Colmerauer, with Philippe Roussel, used this dual interpretation of clauses as the basis of Prolog, which was implemented in the summer and autumn of The first Prolog program, also written in and implemented in Marseille, was a French question-answering system.
The use of Prolog as a practical programming language was given great momentum by the development of a compiler by David Warren in Edinburgh in Experiments demonstrated that Edinburgh Prolog could compete with the processing speed of other symbolic programming languages such as Lisp. Edinburgh Prolog became the de facto standard and strongly influenced the definition of ISO standard Prolog. Abductive logic programming is an extension of normal Logic Programming that allows some predicates, declared as abducible predicates, to be "open" or undefined.
A clause in an abductive logic program has the form:. The abducible predicates can be constrained by integrity constraints, which can have the form:. Problem solving is achieved by deriving hypotheses expressed in terms of the abducible predicates as solutions of problems to be solved. These problems can be either observations that need to be explained as in classical abductive reasoning or goals to be solved as in normal logic programming. For example, the hypothesis normal mary explains the observation canfly mary.
Abductive logic programming has been used for fault diagnosis, planning, natural language processing and machine learning. It has also been used to interpret Negation as Failure as a form of abductive reasoning. Because mathematical logic has a long tradition of distinguishing between object language and metalanguage, logic programming also allows metalevel programming.
The simplest metalogic program is the so-called " vanilla " meta-interpreter:. Metalogic programming allows object-level and metalevel representations to be combined, as in natural language. It can also be used to implement any logic that is specified by means of inference rules.
Metalogic is used in logic programming to implement metaprograms, which manipulate other programs, databases, knowledge bases or axiomatic theories as data. Constraint logic programming combines Horn clause logic programming with constraint solving. It extends Horn clauses by allowing some predicates, declared as constraint predicates, to occur as literals in the body of clauses. A constraint logic program is a set of clauses of the form:.
Declaratively, such clauses are read as ordinary logical implications:. However, whereas the predicates in the heads of clauses are defined by the constraint logic program, the predicates in the constraints are predefined by some domain-specific model-theoretic structure or theory. Procedurally, subgoals whose predicates are defined by the program are solved by goal-reduction, as in ordinary logic programming, but constraints are checked for satisfiability by a domain-specific constraint-solver, which implements the semantics of the constraint predicates.
An initial problem is solved by reducing it to a satisfiable conjunction of constraints. The following constraint logic program represents a toy temporal database of john's history as a teacher:. The following goal clause queries the database to find out when john both taught logic and was a professor :. Constraint logic programming has been used to solve problems in such fields as civil engineering , mechanical engineering , digital circuit verification, automated timetabling , air traffic control , and finance.
It is closely related to abductive logic programming. Concurrent logic programming integrates concepts of logic programming with concurrent programming. A concurrent logic program is a set of guarded Horn clauses of the form:. The conjunction G 1 , Declaratively, guarded Horn clauses are read as ordinary logical implications:. However, procedurally, when there are several clauses whose heads H match a given goal, then all of the clauses are executed in parallel, checking whether their guards G 1 , If the guards of more than one clause hold, then a committed choice is made to one of the clauses, and execution proceedes with the subgoals B 1 , These subgoals can also be executed in parallel.
Thus concurrent logic programming implements a form of "don't care nondeterminism", rather than "don't know nondeterminism". For example, the following concurrent logic program defines a predicate shuffle Left, Right, Merge , which can be used to shuffle two lists Left and Right , combining them into a single list Merge that preserves the ordering of the two lists Left and Right :. Here,  represents the empty list, and [Head Tail] represents a list with first element Head followed by list Tail , as in Prolog.
Notice that the first occurrence of in the second and third clauses is the list constructor, whereas the second occurrence of is the commitment operator. The program can be used, for example, to shuffle the lists [ace, queen, king] and [1, 4, 2] by invoking the goal clause:. Arguably, concurrent logic programming is based on message passing and consequently is subject to the same indeterminacy as other concurrent message-passing systems, such as Actors see Indeterminacy in concurrent computation. Carl Hewitt has argued that, concurrent logic programming is not based on logic in his sense that computational steps cannot be logically deduced.
Consequently, the indeterminacy of computations implies that not all logical consequences of the program can be deduced. Concurrent constraint logic programming combines concurrent logic programming and constraint logic programming , using constraints to control concurrency. A clause can contain a guard, which is a set of constraints that may block the applicability of the clause.
When the guards of several clauses are satisfied, concurrent constraint logic programming makes a committed choice to the use of only one. Inductive logic programming is concerned with generalizing positive and negative examples in the context of background knowledge: machine learning of logic programs.
Logic Programming — Programming Languages alpha documentation
Recent work in this area, combining logic programming, learning and probability, has given rise to the new field of statistical relational learning and probabilistic inductive logic programming. Several researchers have extended logic programming with higher-order programming features derived from higher-order logic , such as predicate variables. Basing logic programming within linear logic has resulted in the design of logic programming languages that are considerably more expressive than those based on classical logic.
Horn clause programs can only represent state change by the change in arguments to predicates. In linear logic programming, one can use the ambient linear logic to support state change. Forum provides a goal-directed interpretation of all of linear logic. F-logic extends logic programming with objects and the frame syntax. Logtalk extends the Prolog programming language with support for objects, protocols, and other OOP concepts.
Highly portable, it supports most standard-compliant Prolog systems as backend compilers. Transaction logic is an extension of logic programming with a logical theory of state-modifying updates. It has both a model-theoretic semantics and a procedural one. An implementation of a subset of Transaction logic is available in the Flora-2 system. Other prototypes are also available. See also: Logic machines in fiction and List of fictional computers. From Wikipedia, the free encyclopedia. For the method of machine translation, see Rule-based machine translation. For methods of machine learning, see Rule-based machine learning.
Main article: Declarative programming. Main article: Negation as failure. Main article: Prolog. Main article: Constraint logic programming. Main article: Concurrent logic programming. Main article: Concurrent constraint logic programming. Main article: Inductive logic programming. This article includes a list of references , but its sources remain unclear because it has insufficient inline citations.
Please help to improve this article by introducing more precise citations. February Learn how and when to remove this template message. Winograd