| OCR Text |
Show 127 each process to produce one or more partial results before they are demanded. Additional parallelism can be achieved in the following ways: ( 1) The subterms involved in the reductions of a function term can be reduced in parallel; (2) In the execution of biased semantic unification, the applicability of the vanous defining equations can be tested in parallel. The parallel evaluation model sketched here is actually a variant of the Kahn-MacOueen parallel interpreter [59]. In our model, computing agents consist of functions and relations, and both eager and lazy evaluations, as well as possibly a combination of the two. 6.4 Related Work and Discussion We have described Funlog, a computational model which integrates functional programming and logic programming. The underlying function model is characterized by a term rewriting system with the confluence property. The reduction mechanism is based on pattern-driven lazy reduction. By embedding pattern-driven reduction into the conventional unification algorithm, we obtain the notion of semantic unification, which provides the key mechanism for combining functional programming and logic programming. This enhances logic based computational frameworks by adding the ability to gracefully terminate computations on infinite data structures, and extends the functional computational frameworks by providing a knowledge-based inferencing ability. Furthermore, the current model can be extended to include logic programming with equality (for certain equational theories) if we use E-unification algorithm{s) to replace the semantic unification algorithm. This then provides the ability to reason about equations. Several languages based upon first-order predicate logic support computations on infinite data structures and provide a notion of functions. FPL [4] is an extension of a functional language, and enjoys a first-order logic axiomatic flavor. However, the language only defines (deterministic) functions. A demanddriven lazy evaluation rule is provided in the language described in [39] and provides the ability to terminate computations on infinite data structures. This |