Results 1  10
of
21
A unified computation model for functional and logic programming
 IN PROC. OF THE 24TH ACM SYMPOSIUM ON PRINCIPLES OF PROGRAMMING LANGUAGES (PARIS
, 1997
"... We propose a new computation model which combines the operational principles of functional languages (reduction), logic languages (nondeterministic search for solutions), and integrated functional logic languages (residuation and narrowing). This computation model combines efficient evaluation prin ..."
Abstract

Cited by 140 (67 self)
 Add to MetaCart
We propose a new computation model which combines the operational principles of functional languages (reduction), logic languages (nondeterministic search for solutions), and integrated functional logic languages (residuation and narrowing). This computation model combines efficient evaluation principles of functional languages with the problemsolving capabilities of logic programming. Since the model allows the delay of function calls which are not sufficiently instantiated, it also supports a concurrent style of programming. We provide soundness and completeness results and show that known evaluation principles of functional logic languages are particular instances of this model. Thus, our model is a suitable basis for future declarative programming languages.
Programming in an Integrated Functional and Logic Language
, 1999
"... Escher is a generalpurpose, declarative programming language that integrates the best features of both functional and logic programming languages. It has types and modules, higherorder and metaprogramming facilities, concurrency, and declarative input/output. The main design aim is to combine in ..."
Abstract

Cited by 65 (14 self)
 Add to MetaCart
Escher is a generalpurpose, declarative programming language that integrates the best features of both functional and logic programming languages. It has types and modules, higherorder and metaprogramming facilities, concurrency, and declarative input/output. The main design aim is to combine in a practical and comprehensive way the best ideas of existing functional and logic languages, such as Haskell and Godel. In fact, Escher uses the Haskell syntax and is most straightforwardly understood as an extension of Haskell. Consequently, this paper discusses Escher from this perspective. It provides an introduction to the Escher language, concentrating largely on the issue of programming style and the Escher programming idioms not provided by Haskell. Also the extra mechanisms needed to support these idioms are discussed.
Curry: A Truly Functional Logic Language
, 1995
"... Functional and logic programming are the most important declarative programming paradigms, and interest in combining them has grown over the last decade. However, integrated functional logic languages are currently not widely used. This is due to the fact that the operational principles are not w ..."
Abstract

Cited by 53 (5 self)
 Add to MetaCart
Functional and logic programming are the most important declarative programming paradigms, and interest in combining them has grown over the last decade. However, integrated functional logic languages are currently not widely used. This is due to the fact that the operational principles are not well understood and many different evaluation strategies have been proposed which resulted in many different functional logic languages. To overcome this situation, we propose the functional logic language Curry which can deal as a standard language in this area. It includes important ideas of existing functional logic languages and recent developments, and combines the most important features of functional and logic languages. Thus, Curry can be the basis to combine the currently separated research efforts of the functional and logic programming communities and to boost declarative programming in general. Moreover, since functions provide for more efficient evaluation strategies and ...
Algebra of logic programming
 International Conference on Logic Programming
, 1999
"... At present, the field of declarative programming is split into two main areas based on different formalisms; namely, functional programming, which is based on lambda calculus, and logic programming, which is based on firstorder logic. There are currently several language proposals for integrating th ..."
Abstract

Cited by 20 (3 self)
 Add to MetaCart
At present, the field of declarative programming is split into two main areas based on different formalisms; namely, functional programming, which is based on lambda calculus, and logic programming, which is based on firstorder logic. There are currently several language proposals for integrating the expressiveness of these two models of computation. In this thesis we work towards an integration of the methodology from the two research areas. To this end, we propose an algebraic approach to reasoning about logic programs, corresponding to the approach taken in functional programming. In the first half of the thesis we develop and discuss a framework which forms the basis for our algebraic analysis and transformation methods. The framework is based on an embedding of definite logic programs into lazy functional programs in Haskell, such that both the declarative and the operational semantics of the logic programs are preserved. In spite of its conciseness and apparent simplicity, the embedding proves to have many interesting properties and it gives rise to an algebraic semantics of logic programming. It also allows us to reason about logic programs in a simple calculational style, using rewriting and the algebraic laws of combinators. In the embedding, the meaning of a logic program arises compositionally from the meaning of its constituent subprograms and the combinators that connect them. In the second half of the thesis we explore applications of the embedding to the algebraic transformation of logic programs. A series of examples covers simple program derivations, where our techniques simplify some of the current techniques. Another set of examples explores applications of the more advanced program development techniques from the Algebra of Programming by Bird and de Moor [18], where we expand the techniques currently available for logic program derivation and optimisation. To my parents, Sandor and Erzsebet. And the end of all our exploring Will be to arrive where we started And know the place for the first time.
A Practical Partial Evaluator for a MultiParadigm Declarative Language
 Journal of Functional and Logic Programming
, 2001
"... Partial evaluation is an automatic technique for program optimization which preserves program semantics. The range of its potential applications is extremely large, as witnessed by successful experiences in several fields. This paper summarizes our findings in the development of partial evaluation t ..."
Abstract

Cited by 18 (14 self)
 Add to MetaCart
Partial evaluation is an automatic technique for program optimization which preserves program semantics. The range of its potential applications is extremely large, as witnessed by successful experiences in several fields. This paper summarizes our findings in the development of partial evaluation tools for Curry, a modern multiparadigm declarative language which combines features from functional, logic and concurrent programming. From a practical point of view, the most promising approach appears to be a recent partial evaluation framework which translates source programs into a maximally simplified representation. We support this statement by extending the underlying method in order to design a practical partial evaluation tool for the language Curry. The process is fully automatic and can be incorporated into a Curry compiler as a sourcetosource transformation on intermediate programs. An implementation of the partial evaluator has been undertaken. Experimental resul...
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.
A Partial Evaluation Framework for Curry Programs
, 1999
"... In this work, we develop a partial evaluation technique for residuating functional logic programs, which generalize the concurrent computation models for logic programs with delays to functional logic programs. We show how to lift the nondeterministic choices from run time to specialization time. We ..."
Abstract

Cited by 8 (5 self)
 Add to MetaCart
In this work, we develop a partial evaluation technique for residuating functional logic programs, which generalize the concurrent computation models for logic programs with delays to functional logic programs. We show how to lift the nondeterministic choices from run time to specialization time. We ascertain the conditions under which the original and the transformed program have the same answer expressions for the considered class of queries as well as the same floundering behavior. All these results are relevant for program optimization in Curry, a functional logic language which is intended to become a standard in this area. Preliminary empirical evaluation of the specialized Curry programs demonstrates that our technique also works well in practice and leads to substantial performance improvements. To our knowledge, this work is the first attempt to formally define and prove correct a general scheme for the partial evaluation of functional logic programs with delays.
Demanddriven Search in Functional Logic Programs
, 1998
"... In this paper we discuss the advantage of lazy functional logic languages to solve search problems. We show that the lazy evaluation strategy of such languages can be easily exploited to implement a solver that explores only the dynamically demanded parts of the search space. In contrast to pure log ..."
Abstract

Cited by 6 (3 self)
 Add to MetaCart
In this paper we discuss the advantage of lazy functional logic languages to solve search problems. We show that the lazy evaluation strategy of such languages can be easily exploited to implement a solver that explores only the dynamically demanded parts of the search space. In contrast to pure logic programming, the use of nondeterministic functions enables a modular and simple implementation without the risk of floundering. Furthermore, a local encapsulation of search is useful to avoid the combinatorial explosion of the demanded search space. The necessary features (laziness, nondeterministic functions, encapsulated search) are available in Curry, a new declarative language intended to combine functional and logic programming techniques. We demonstrate the advantage of this approach with a musical application implemented in Curry: the generation of appropriate chords for the accompaniment of a given melody.
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, ...