In
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includi ...
, declarative programming is a
programming paradigm
Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms.
Some paradigms are concerned mainly with implications for the execution model of the language, suc ...
—a style of building the structure and elements of computer programs—that expresses the logic of a
computation without describing its
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''im ...
.
Many languages that apply this style attempt to minimize or eliminate
side effects
In medicine, a side effect is an effect, whether therapeutic or adverse, that is secondary to the one intended; although the term is predominantly employed to describe adverse effects, it can also apply to beneficial, but unintended, consequence ...
by describing ''what'' the program must accomplish in terms of the
problem domain, rather than describe ''how'' to accomplish it as a sequence of the programming
language primitive
In computing, language primitives are the simplest elements available in a programming language. A primitive is the smallest 'unit of processing' available to a programmer of a given machine, or can be an atomic element of an expression in a la ...
s
(the ''how'' being left up to the language's
implementation
Implementation is the realization of an application, or execution of a plan, idea, model, design, specification, standard, algorithm, or policy.
Industry-specific definitions
Computer science
In computer science, an implementation is a real ...
). This is in contrast with
imperative programming
In computer science, imperative programming is a programming paradigm of software that uses statements that change a program's state. In much the same way that the imperative mood in natural languages expresses commands, an imperative program ...
, which implements
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing ...
s in explicit steps.
Declarative programming often considers
programs as theories of a
formal logic
Logic is the study of correct reasoning. It includes both formal and informal logic. Formal logic is the science of deductively valid inferences or of logical truths. It is a formal science investigating how conclusions follow from premis ...
, and computations as deductions in that logic space. Declarative programming may greatly simplify writing
parallel programs.
Common declarative languages include those of
database query languages (e.g.,
SQL,
XQuery
XQuery (XML Query) is a query and functional programming language that queries and transforms collections of structured and unstructured data, usually in the form of XML, text and with vendor-specific extensions for other data formats (JSON, b ...
),
regular expression
A regular expression (shortened as regex or regexp; sometimes referred to as rational expression) is a sequence of characters that specifies a search pattern in text. Usually such patterns are used by string-searching algorithms for "find" ...
s,
logic programming
Logic programming is a programming paradigm which is largely based on formal logic. Any program written in a logic programming language is a set of sentences in logical form, expressing facts and rules about some problem domain. Major logic pro ...
,
functional programming
In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that ...
, and
configuration management systems.
Definition
Declarative programming is often defined as any style of programming that is not
imperative. A number of other common definitions attempt to define it by simply contrasting it with imperative programming. For example:
* A high-level program that describes what a computation should perform.
* Any programming language that lacks
side effects
In medicine, a side effect is an effect, whether therapeutic or adverse, that is secondary to the one intended; although the term is predominantly employed to describe adverse effects, it can also apply to beneficial, but unintended, consequence ...
(or more specifically, is
referentially transparent
In computer science, referential transparency and referential opacity are properties of parts of computer programs. An expression is called ''referentially transparent'' if it can be replaced with its corresponding value (and vice-versa) withou ...
)
* A language with a clear correspondence to
mathematical logic
Mathematical logic is the study of formal logic within mathematics. Major subareas include model theory, proof theory, set theory, and recursion theory. Research in mathematical logic commonly addresses the mathematical properties of formal ...
.
These definitions overlap substantially.
Declarative programming is a non-imperative style of programming in which programs describe their desired results without explicitly listing commands or steps that must be performed.
Functional and
logical programming languages are characterized by a declarative programming style. In
logical programming languages, programs consist of logical statements, and the program executes by searching for proofs of the statements.
In a
pure functional language, such as
Haskell
Haskell () is a general-purpose, statically-typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research and industrial applications, Haskell has pioneered a number of programming lan ...
, all functions are
without side effects, and state changes are only represented as functions that transform the state, which is explicitly represented as a
first-class object in the program. Although pure functional languages are non-imperative, they often provide a facility for describing the effect of a function as a series of steps. Other functional languages, such as
Lisp,
OCaml and
Erlang, support a mixture of procedural and functional programming.
Some logical programming languages, such as
Prolog
Prolog is a logic programming language associated with artificial intelligence and computational linguistics.
Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is intended primarily ...
, and database query languages, such as SQL, while declarative in principle, also support a procedural style of programming.
Subparadigms
Declarative programming is an
umbrella term
In linguistics, semantics, general semantics, and ontologies, hyponymy () is a semantic relation between a hyponym denoting a subtype and a hypernym or hyperonym (sometimes called umbrella term or blanket term) denoting a supertype. In other wor ...
that includes a number of better-known
programming paradigm
Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms.
Some paradigms are concerned mainly with implications for the execution model of the language, suc ...
s.
Constraint programming
Constraint programming
Constraint programming (CP) is a paradigm for solving combinatorial problems that draws on a wide range of techniques from artificial intelligence, computer science, and operations research. In constraint programming, users declaratively state t ...
states relations between variables in the form of constraints that specify the properties of the target solution. The set of constraints is
solved by giving a value to each variable so that the solution is consistent with the maximum number of constraints. Constraint programming often complements other paradigms: functional, logical, or even imperative programming.
Domain-specific languages
Well-known examples of declarative
domain-specific languages (DSLs) include the
yacc
Yacc (Yet Another Compiler-Compiler) is a computer program for the Unix operating system developed by Stephen C. Johnson. It is a Look Ahead Left-to-Right Rightmost Derivation (LALR) parser generator, generating a LALR parser (the part of a co ...
parser generator input language,
QML
QML (Qt Modeling Language) is a user interface markup language. It is a declarative language (similar to CSS and JSON) for designing user interface–centric applications. Inline JavaScript code handles imperative aspects. It is associated wi ...
, the
Make
Make or MAKE may refer to:
* Make (magazine), a tech DIY periodical
*Make (software), a software build tool
*Make, Botswana, in the Kalahari Desert
*Make Architects
Make Architects is an international architecture practice headquartered in Londo ...
build specification language,
Puppet's configuration management language,
regular expression
A regular expression (shortened as regex or regexp; sometimes referred to as rational expression) is a sequence of characters that specifies a search pattern in text. Usually such patterns are used by string-searching algorithms for "find" ...
s, and a subset of
SQL (SELECT queries, for example). DSLs have the advantage of being useful while not necessarily needing to be
Turing-complete
In computability theory, a system of data-manipulation rules (such as a computer's instruction set, a programming language, or a cellular automaton) is said to be Turing-complete or computationally universal if it can be used to simulate any ...
, which makes it easier for a language to be purely declarative.
Many markup languages such as
HTML
The HyperText Markup Language or HTML is the standard markup language for documents designed to be displayed in a web browser. It can be assisted by technologies such as Cascading Style Sheets (CSS) and scripting languages such as JavaSc ...
,
MXML
MXML is an XML-based user interface markup language first introduced by Macromedia in March 2004. Application developers use MXML in combination with ActionScript to develop rich web applications, with products such as Apache Flex.
Adobe ...
,
XAML
Extensible Application Markup Language (XAML ) is a declarative XML-based language that Microsoft developed for initializing structured values and objects. It is available under Microsoft's Open Specification Promise.
XAML is used extensively ...
,
XSLT or other
user-interface markup languages are often declarative. HTML, for example, only describes what should appear on a webpage - it specifies neither
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''im ...
for rendering a page nor the page's possible
interactions with a user.
, some software systems combine traditional user-interface markup languages (such as HTML) with declarative markup that defines what (but not how) the back-end server systems should do to support the declared interface. Such systems, typically using a domain-specific
XML namespace
XML namespaces are used for providing uniquely named elements and attributes in an XML document. They are defined in a W3C recommendation. An XML instance may contain element or attribute names from more than one XML vocabulary. If each vocabular ...
, may include abstractions of SQL database syntax or parameterized calls to web services using
representational state transfer (REST) and
SOAP
Soap is a salt of a fatty acid used in a variety of cleansing and lubricating products. In a domestic setting, soaps are surfactants usually used for washing, bathing, and other types of housekeeping. In industrial settings, soaps are use ...
.
Functional programming
Functional programming languages such as
Haskell
Haskell () is a general-purpose, statically-typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research and industrial applications, Haskell has pioneered a number of programming lan ...
,
Scheme, and
ML evaluate expressions via function application. Unlike the related but more
imperative paradigm of
Procedural programming
Procedural programming is a programming paradigm, derived from imperative programming, based on the concept of the '' procedure call''. Procedures (a type of routine or subroutine) simply contain a series of computational steps to be carrie ...
, functional programming places little emphasis on explicit sequencing. For example, in
Scheme, the order of evaluation of many kinds of sub-expressions is undefined or implicit. Instead, computations are characterised by various kinds of recursive
higher-order function application and
composition
Composition or Compositions may refer to:
Arts and literature
*Composition (dance), practice and teaching of choreography
*Composition (language), in literature and rhetoric, producing a work in spoken tradition and written discourse, to include v ...
, and as such can be regarded simply as a set of mappings between
domains and
codomain
In mathematics, the codomain or set of destination of a function is the set into which all of the output of the function is constrained to fall. It is the set in the notation . The term range is sometimes ambiguously used to refer to either th ...
s. Many functional languages, including most of those in the ML and Lisp families, are not
purely functional, and thus allow the introduction of
stateful effects in programs, though this is typically avoided when possible.
Hybrid languages
Makefiles, for example, specify dependencies in a declarative fashion, but include an imperative list of actions to take as well. Similarly, yacc specifies a context free grammar declaratively, but includes code snippets from a host language, which is usually imperative (such as
C).
Logic programming
Logic programming languages such as
Prolog
Prolog is a logic programming language associated with artificial intelligence and computational linguistics.
Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is intended primarily ...
state and query relations. The specifics of ''how'' these queries are answered is up to the implementation and its theorem prover, but typically take the form of some sort of
unification. Like functional programming, many logic programming languages permit side effects, and as a result are not strictly declarative.
Modeling
Models, or mathematical representations, of physical systems may be implemented in computer code that is declarative. The code contains a number of equations, not imperative assignments, that describe ("declare") the behavioral relationships. When a model is expressed in this formalism, a computer is able to perform algebraic manipulations to best formulate the solution algorithm. The mathematical causality is typically imposed at the boundaries of the physical system, while the behavioral description of the system itself is declarative or acausal. Declarative
modeling language
A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of components in th ...
s and environments include
Analytica,
Modelica
Modelica is an object-oriented, declarative, multi-domain modeling language for component-oriented modeling of complex systems, e.g., systems containing mechanical, electrical, electronic, hydraulic, thermal, control, electric power or process- ...
and
Simile
A simile () is a figure of speech that directly ''compares'' two things. Similes differ from other metaphors by highlighting the similarities between two things using comparison words such as "like", "as", "so", or "than", while other metaphors c ...
.
Examples
Lisp
Lisp (1958) stands for "LISt Processor."
It is tailored to process
lists. A data structure is formed by building lists of lists. In memory, this forms a
tree data structure
In computer science, a tree is a widely used abstract data type that represents a hierarchical tree structure with a set of connected nodes. Each node in the tree can be connected to many children (depending on the type of tree), but must be c ...
. Internally, the tree structure of typical Lisp data lends itself nicely to processing with
recursive
Recursion (adjective: ''recursive'') occurs when a thing is defined in terms of itself or of its type. Recursion is used in a variety of disciplines ranging from linguistics to logic. The most common application of recursion is in mathematics ...
functions.
The syntax to build a tree is to enclose the whitespace-separated
elements within parenthesis. The following is a list of three elements. The first two elements are themselves lists of two elements each:
((A B) (HELLO WORLD) 94)
Lisp has functions to extract and reconstruct elements.
The function
car
(sometimes called
first
) returns the first element in the list. The function
cdr
(sometimes called
rest
) returns a list containing everything but the first element. The function
cons
returns a list that is the concatenation of two data elements. Therefore, the following expression will return the list
X
:
(cons (car x) (cdr x))
The above code returns a ''copy'' of the list
X
. As is typical in functional languages, operations in Lisp often copy data when asked to produce new data from old. The tree structure of Lisp data facilitates this as well: a new structure made from pre-existing data shares as much of its internal structure with its antecedents as possible, with new additions stored as branches of the tree, and references to the original structure under its original name will return exactly that and no more.
One drawback of Lisp is when many functions are nested, the parentheses may look confusing.
Modern Lisp
environments help ensure parenthesis match. As an aside, Lisp does support the ''imperative language'' operations of the assignment statement and goto loops.
Also, ''Lisp'' is not concerned with the
datatype of the elements at compile time. Instead, it assigns the datatypes at runtime. This may lead to programming errors not being detected early in the development process. To counteract this, Lisp development is typically carried out in an extremely incremental manner, with functions and higher-order functions built up and tested live during development. Additionally, through the use of
macros, which are Lisp functions that operate upon Lisp programs as data structures, type checking may be performed discretionally at any point the programmer wishes.
Writing large, reliable, and readable Lisp programs requires forethought. If properly planned, the program may be much shorter than an equivalent ''imperative language'' program.
''Lisp'' is widely used in
artificial intelligence
Artificial intelligence (AI) is intelligence—perceiving, synthesizing, and inferring information—demonstrated by machines, as opposed to intelligence displayed by animals and humans. Example tasks in which this is done include speech r ...
. However, its usage has been accepted only because it has ''imperative language'' operations, making unintended side-effects possible.
ML
ML (1973)
stands for "Meta Language." ML is statically typed, and function arguments and return types may be annotated.
''ML'' is not parenthesis-eccentric like ''Lisp''. The following is an application of
times_10
:
times_10 2
It returns "20 : int", that is,
20
, a value of type
int
.
Like ''Lisp'', ''ML'' is tailored to process lists, though all elements of a list must be the same type.
Prolog
Prolog
Prolog is a logic programming language associated with artificial intelligence and computational linguistics.
Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is intended primarily ...
(1972) stands for "PROgramming in LOGic." It was designed to process
natural languages.
The building blocks of a Prolog program are ''
objects'' and their ''relationships'' to other objects. ''Objects'' are built by stating true ''facts'' about them.
Set theory
Set theory is the branch of mathematical logic that studies sets, which can be informally described as collections of objects. Although objects of any kind can be collected into a set, set theory, as a branch of mathematics, is mostly conce ...
''facts'' are formed by assigning objects to sets. The syntax is
setName(object).
* Cat is an animal.
:
animal(cat).
* Mouse is an animal.
:
animal(mouse).
* Tom is a cat.
:
cat(tom).
* Jerry is a mouse.
:
mouse(jerry).
Adjective
In linguistics, an adjective (abbreviated ) is a word that generally modifies a noun or noun phrase or describes its referent. Its semantic role is to change information given by the noun.
Traditionally, adjectives were considered one of the ma ...
''facts'' are formed using
adjective(object).
* Cat is big.
:
big(cat).
* Mouse is small.
:
small(mouse).
''Relationships'' are formed using multiple items inside the parentheses. In our example we have
verb(object,object)
and
verb(adjective,adjective)
.
* Mouse eats cheese.
:
eat(mouse,cheese).
* Big animals eat small animals.
:
eat(big,small).
After all the facts and relationships are entered, then a question can be asked:
: Will Tom eat Jerry?
:
?- eat(tom,jerry).
Prolog's usage has expanded to become a goal-oriented language.
In a goal-oriented application, the goal is defined by providing a list of subgoals. Then each subgoal is defined by further providing a list of its subgoals, etc. If a path of subgoals fails to find a solution, then that subgoal is
backtracked and another path is systematically attempted.
Practical applications include solving the
shortest path problem and producing
family tree
A family tree, also called a genealogy or a pedigree chart, is a chart representing family relationships in a conventional tree structure. More detailed family trees, used in medicine and social work, are known as genograms.
Representations of ...
s.
See also
*
Comparison of programming paradigms
This article attempts to set out the various similarities and differences between the various programming paradigms as a summary in both graphical and tabular format with links to the separate discussions concerning these similarities and differ ...
*
Inductive programming
Inductive programming (IP) is a special area of automatic programming, covering research from artificial intelligence and programming, which addresses learning of typically declarative (logic or functional) and often recursive programs from inc ...
*
List of declarative programming languages
References
External links
* Frans Coenen
Characteristics of declarative programming languages 1999.
*
Robert Harper Robert or Bob Harper may refer to:
* Robert Almer Harper (1862–1946), American botanist
* Robert Goodloe Harper (1765–1825), US senator from Maryland
* Robert Harper (fl. 1734–1761), founder of Harpers Ferry, West Virginia
* Robert Harper (a ...
.
What, If Anything, Is A Declarative Language? 2013.
There Is Such A Thing As A Declarative Language, and It’s The World’s Best DSL 2013.
* Olof Torgersson
1996.
{{Authority control
Programming paradigms