RELFUN is a logic-programming language with call-by-value (eager) expressions of non-deterministic, non-ground functions [Boley92b]. 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. PROLOG's is-primitive is generalized to unify a structure with the value(s) of an arbitrary expression, which may become flattened via further is-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 are used in the hybrid COLAB shell [BoleyHanschke+93] and in VEGA's Declarative Representation Language.




Harold Boley & Michael Sintek (