The Relational-Functional Language RELFUNhttp://www.dfki.uni-kl.de/~vega/relfun.html |
RELFUN is a logic-programming language with call-by-value (eager) expressions of non-deterministic, non-ground functions [Boley99]. Clauses are `hornish', succeeding with true(s), or `footed', returning any value(s). They define operations (relations and functions) permitting (apply-reducible) higher-order syntax with arbitrary terms (constants, structures, and variables) as operators. The language explicitly distinguishes structures [passive] and expressions (active). All structures and expressions, not only lists or tuples, can have varying arities. RELFUN generalizes PROLOG's is-primitive to .=, unifying a structure with the value(s) of an arbitrary expression; expressions may become flattened via further .=-calls. Finite domains and exclusions [Boley93] as well as sorts [Hall95] are first-class citizens built into the unification. Extensions include single-cut clauses and relational-functional primitives such as a value-returning tupof. Versions of RELFUN have been used in the hybrid COLAB shell [BoleyHanschke+93], as VEGA's Declarative Representation Language, and for developing ontologies, e.g. for Mathematics International (Mathint Ontology).
RELFUN can be introduced from a relational (PROLOG) point of view. Or, it can be introduced from a functional (LISP) point of view (as implicit in an earlier elementary German introduction and a later equational English dialog).
The course in Functional and Logic Programming at UNB uses RELFUN as its teaching language. The full slides are available for free reuse (pdf, ppt).
Further RELFUN material, e.g. about its XML version RFML, can be found at http://www.relfun.org. The Rule Markup Language initiative (RuleML) is partially based on RELFUN's RFML.