Results 1 
6 of
6
Adding equations to NUProlog
 In Proc. of the 3rd Int. Symposium on Programming Language Implementation and Logic Programming
, 1991
"... This paper describes an extension to NUProlog which allows evaluable functions to be defined using equations. We consider it to be the most pragmatic way of combining functional and relational programming. The implementation consists of several hundred lines of Prolog code and the underlying Prolog ..."
Abstract

Cited by 38 (5 self)
 Add to MetaCart
This paper describes an extension to NUProlog which allows evaluable functions to be defined using equations. We consider it to be the most pragmatic way of combining functional and relational programming. The implementation consists of several hundred lines of Prolog code and the underlying Prolog implementation was not modified at all. However, the system is reasonably efficient and supports coroutining, optional lazy evaluation, higher order functions and parallel execution. Efficiency is gained in several ways. First, we use some new implementation techniques. Second, we exploit some of the unique features of NUProlog, though these features are not essential to the implementation. Third, the language is designed so that we can take advantage of implicit mode and determinism information. Although we have not concentrated on the semantics of the language, we believe that our language design decisions and implementation techniques will be useful in the next generation of combined functional and relational languages. Keywords: logic programming, equations, functions, parallelism, indexing, lazy evaluation, higher order.  1  1 Introduction
Solving HigherOrder Equations: From Logic to Programming
, 1995
"... Higherorder constructs provide the necessary level of abstraction for concise and natural formulations in many areas of computer science. We present constructive methods for higherorder equational reasoning with applications ranging from theorem proving to novel programming concepts. A major probl ..."
Abstract

Cited by 34 (7 self)
 Add to MetaCart
Higherorder constructs provide the necessary level of abstraction for concise and natural formulations in many areas of computer science. We present constructive methods for higherorder equational reasoning with applications ranging from theorem proving to novel programming concepts. A major problem of higherorder programming is the undecidability of higherorder unification. In the first part, we develop several classes with decidable secondorder unification. As the main result, we show that the unification of a linear higherorder pattern s with an arbitrary secondorder term that shares no variables with s is decidable and finitely solvable. This is the unification needed for secondorder functionallogic programming. The second main contribution is a framework for solving higherorder equational problems by narrowing. In the firstorder case, narrowing is the underlying computation rule for the integration of logic programming and functional programming. We argue that there are...
Higherorder narrowing
 PROC. NINTH ANNUAL IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE
, 1994
"... We introduce several approaches for solving higherorder equational problems by higherorder narrowing and give first completeness results. The results apply to higherorder functionallogic programming languages and to higherorder unification modulo a higherorder equational theory. We lift the ge ..."
Abstract

Cited by 19 (7 self)
 Add to MetaCart
We introduce several approaches for solving higherorder equational problems by higherorder narrowing and give first completeness results. The results apply to higherorder functionallogic programming languages and to higherorder unification modulo a higherorder equational theory. We lift the general notion of firstorder narrowing to socalled higherorder patterns and argue that the full higherorder case is problematic. Integrating narrowing into unification, called lazy narrowing, can avoid these problems and can be adapted to the full higherorder case. For the secondorder case, we develop a version where the needed secondorder unification remains decidable. Finally we discuss a method that combines both approaches by using narrowing on higherorder patterns with full higherorder constraints.
A CallbyNeed Strategy for HigherOrder FunctionalLogic Programming
 LOGIC PROGRAMMING. PROC. OF THE 1995 INTERNATIONAL SYMPOSIUM
, 1995
"... We present an approach to truely higherorder functionallogic programming based on higherorder narrowing. Roughly speaking, we model a higherorder functional core language by higherorder rewriting and extend it by logic variables. For the integration of logic programs, conditional rules are suppo ..."
Abstract

Cited by 9 (3 self)
 Add to MetaCart
We present an approach to truely higherorder functionallogic programming based on higherorder narrowing. Roughly speaking, we model a higherorder functional core language by higherorder rewriting and extend it by logic variables. For the integration of logic programs, conditional rules are supported. For solving goals in this framework, we present a complete calculus for higherorder conditional narrowing. We develop several refinements that utilize the determinism of functional programs. These refinements can be combined to a narrowing strategy which generalizes callbyneed as in functional programming, where the dedicated higherorder methods are only used for full higherorder goals. Furthermore, we propose an implementational model for this narrowing strategy which delays computations until needed.
HigherOrder Narrowing with Convergent Systems
 In 4th Int. Conf. Algebraic Methodology and Software Technology, AMAST '95. Springer LNCS 936
, 1995
"... . Higherorder narrowing is a general method for higherorder equational reasoning and serves for instance as the foundation for the integration of functional and logic programming. We present several refinements of higherorder lazy narrowing for convergent (terminating and confluent) term rewr ..."
Abstract

Cited by 5 (5 self)
 Add to MetaCart
. Higherorder narrowing is a general method for higherorder equational reasoning and serves for instance as the foundation for the integration of functional and logic programming. We present several refinements of higherorder lazy narrowing for convergent (terminating and confluent) term rewrite systems and their application to program transformation. The improvements of narrowing include a restriction of narrowing at variables, generalizing the firstorder case. Furthermore, functional evaluation via normalization is shown to be complete and a partial answer to the eager variable elimination problem is presented. 1 Introduction and Overview Higherorder narrowing is a method for solving higherorder equations modulo a set of rewrite rules. It forms the basis of functionallogic programming and has been extensively studied in the firstorder case, for a survey see [10]. Motivated by functional programming, there exist several higherorder extensions for such languages [7, ...
HigherOrder FunctionalLogic Programming: A Systematic Development
 In Proc. of the Second Fuji International Workshop on Functional and Logic Programming. World Scientific
, 1997
"... We develop an effective model for higherorder functionallogic programming by refining higherorder narrowing calculi. The refinements reduce the high degree of nondeterminism in narrowing calculi, utilizing properties of functional(logic) programs. These include convergent and leftlinear rewrit ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
We develop an effective model for higherorder functionallogic programming by refining higherorder narrowing calculi. The refinements reduce the high degree of nondeterminism in narrowing calculi, utilizing properties of functional(logic) programs. These include convergent and leftlinear rewrite rules. All refinements can be combined to a narrowing strategy which generalizes callbyneed as in functional programming. Furthermore, we consider conditional rewrite rules which are often convenient for programming applications. 1. Introduction We present a systematic development of a calculus which integrates higherorder functional and logic programming, based on narrowing. Narrowing is a general method for solving equations modulo a set of rewrite rules. Functionallogic languages with a sound and complete operational semantics are mainly based on narrowing. For a survey on the topic we refer to [9]. In our higherorder equational logic we use a rewrite relation due to Nipkow [18],...