FunLog++ - introduction - glossary - language - library - special - semiknown - dynamic
FunLog++ Glossary
FunLog++ hierarchy of formal languages - glossary - object-oriented programming - functional programming - logic programming - logical variable - first class object - unification - syntactic unification - semantic unification - extensible unification - (pattern) matching - eager evaluation - lazy evaluation - extensional properties - intensional properties

Hierarchy of formal languages
FunLog++ is a declarative programming language with elements from functional as well as from logic programming.

 formal language
   imperative
   - state modification
   - essentially sequential
   declarative
     pure functional
     - functional notation
     - directed input/output
     - strongly typed
     - call by value
     - evaluation by reduction (term rewriting)
     pure logic
     - relational notation
     - undirected input/output
     - often untyped
     - call by unification
     - evaluation by resolution
     functional+logic


FunLog++ glossary
object-oriented programming: We call FunLog++ to be object-oriented as it provides classes with encapsulation, inheritance and polymorphism. But in FunLog++ objects have no modifiable internal state, i.e. there are no attributes. Instead FunLog++ uses generic classes where the function of methods depend on class parameters.

functional programming:We call FunLog++ to be functional as evaluation of terms only communicated via parameter positions (in contrast to side effects in imperative languages, e.g. PASCAL) and as terms return a value (in contrast to relational notation as in some logic languages, e.g. PROLOG).

logic programming: We call FunLog++ to be a logic programming language as it uses logical variables and it provides implication and unification as its basic operations.

logical variable: First-class object which can occur in values of other variables. The value of a (logical) variable can be built incrementally by beginning with a skeleton and binding contained variables later as information becomes available(Smolka 1986)

first class object: Data structure that may be input to predicates and obtained as output bindings (Reddy 1986).

unification: To unify two objects is to try to make them equal by mutual binding variables and (sub-)terms. Unification is defined to produce the most general common instance. Unification plays the role of pattern matching, evaluation, message passing, inheritance, and symbolic evaluation.

syntactic unification:We call unification A=B to be syntactic if parameters A and B are matched without further evaluation.

semantic unification: Unification is called semantic if parameter A and B are first evaluated and then the results are syntactically unified.

extensible unification: We call unification to be extensible if the matching algorithm may be redefined for new datatypes or new object classes.

(pattern) matching: Special kind of unification where one parameter (the pattern) contains no variable.

eager evaluation: With eager evaluation terms are evaluated completely before the context (search depth-first).

lazy evaluation: With lazy evaluation terms (messages) are evaluated as late as possible and only if required (search breadth-first).

extensional properties: Properties of the functions computed by the program. Examples of extensional properties are notions of equality for streams and co-routines, characterizing streams by sequences they generate, characterizing operations on co-routines as operations on infinite sequences, and characterizing programs implementing search strategies as functions parameterized by functions describing the search space (Talcott 1986).

intensional properties: Properties of the computations described by the program. Examples of intensional properties are the number of inference steps executed, the number of context switches, the maximum stack depth required in a computation, and the trace of a computation. Intensional properties can be used to design programs that are efficient or that can be made efficient by systematic transformations (Talcott 1986). 


References

Chris Moss: Prolog++ - The power of object-oriented and logic programming. NewYork Addison-Wesley 1994, ISBN 0-201-56507-2

Francis G. McCabe: Logic and Objects. Series in Computer Science, Prentice Hall International, NewYork 1992, ISBN 0-13-536079-X

Richard Bird and Philip Wadler: Introduction to Functional Programming. Series in Computer Science, Prentice Hall International, NewYork 1988, ISBN 0-13-484189-1

Rinus Plasmeijer, Marko van Eekelen: Functional Programming and Parallel Graph Rewriting. NewYork, Addison Wesley, 1993

Uday S. Reddy: On The Relationship between Logic and Functional Languages, in: DeGroot 1986, pp. 3-36

Gerd Smolka: FRESH: A Higher-Order Language with Unification and Multiple Results, in: DeGroot 1986, pp. 469-524

Doug DeGroot and Gary Lindstorm: Logic Programming - Functions, Relations and Equations, 1986, London, Prentice Hall, ISBN 0-13-539958-0,

Carolyn Talcott: Rum - An intensional theory of function and control abstractions, in: Boscarol 1986, pp. 3-44

M.Boscarol, L.Carlucci Aiello, and G. Levi: Foundations of Logic and Functional Programming, Workshop Trento, Italy, December 1986, Proceedings edited by , Lecture notes in computes science, no. 306 (Springer, Berlin), ISBN 0-387-19129-1
 
 
FunLog++ - introduction - glossary - language - library - special - semiknown - dynamic
Last modification: B. Pohl 7. April 1997 / 14. September 1997 / 24.Oktober 2000

==> FunLog++ www entry - introduction - glossary - reference - library - tutorial - demo <== 


Last modification: B. Pohl 7. April 1997 / 14. September 1997 / 22.August 2000