Professionals involved in software development should follow the potential capabilities of functional logic programming, as it is an emerging programming paradigm offering novel ways to develop software. functional logic programming supports specification, prototyping, and application programming within a single language. it is the basis of a practical and convenient approach to produce high-quality software. functional logic programming is terse yet clear, supports rapid development by avoiding some tedious tasks, and allows incremental refinements to improve efficiency. it makes programming fun without sacrificing reliability. ILLUstratIon by daVId boLLInger gamate them into a single language. Functional logic languages combine the features of both paradigms in a conservative manner. Programs that do not use the features of one paradigm behave as programs of the other paradigm. In addition to the convenience of using the features of both paradigms within a single language, the combination has additional advantages. For instance, the demand-driven evaluation of functional programming applied to nondeterministic operations of logic programming leads to more efficient search strategies. The effort to develop languages intended to meet this goal has produced a substantial amount of research spanning two decades (see Hanus 22 for a recent survey). These achievements are reviewed here. The concrete syntax of the examples is Curry, 27 but the design of the code and most of our considerations about the programs are valid for any other functional logic language, for example, TOY, 30 based on reduction for functional evaluation and on narrowing for the instantiation of unbound logic variables. A common trait of functional and logic languages is the distinction between data constructors and defined operations. This distinction is also essential for functional logic languages to support reasonably efficient execution mechanisms. Data constructors build the data underlying an application, whereas defined operations manipulate the data. For instance, True and False construct (are) Boolean values. A simple example of a more complex data structure is a list of values. We denote by [] the empty list and by (x:xs) a non-empty list where x is the first element and xs is the list of remaining elements. We create longer lists by nested applications of constructors: (1:(2:(3:[]))) denotes a list with elements 1, 2, and 3. Since lists are ubiquitous structures in declarative languages, syntactic sugar is usually provided to ease writing lists; thus, [1, 2, 3] abbreviates the previous list structure. A further feature common to many functional and logic languages is the definition of operations by pattern matching. Functions are specified by different equations for different argument values. For instance, a function, "++", returning the concatenation of two input lists is defined as follows Generative artist and programmer David Bollinger uses math and algorithms to create artwork. the illustrations in this article reflect n-unit cubes recursively subdivided based on patterns defined by the greatest common divisor among the coordinate axes.
Functional logic programming REF is an approach towards this integration.
Functional logic programming
CACM
Computer Science