Results 1  10
of
27
The Integration of Functions into Logic Programming: From Theory to Practice
 Journal of Logic Programming
, 1994
"... Abstract. Functional logic programming languages combine the most important declarative programming paradigms, and attempts to combine these paradigms have a long history. The declarative multiparadigm language Curry is influenced by recent advances in the foundations and implementation of function ..."
Abstract

Cited by 336 (54 self)
 Add to MetaCart
Abstract. Functional logic programming languages combine the most important declarative programming paradigms, and attempts to combine these paradigms have a long history. The declarative multiparadigm language Curry is influenced by recent advances in the foundations and implementation of functional logic languages. The development of Curry is an international initiative intended to provide a common platform for the research, teaching, and application of integrated functional logic languages. This paper surveys the foundations of functional logic programming that are relevant for Curry, the main features of Curry, and extensions and applications of Curry and functional logic programming. 1
An Implementation of Narrowing Strategies
 Journal of the ACM
, 2001
"... This paper describes an implementation of narrowing, an essential component of implementations of modern functional logic languages. These implementations rely on narrowing, in particular on some optimal narrowing strategies, to execute functional logic programs. We translate functional logic progra ..."
Abstract

Cited by 294 (123 self)
 Add to MetaCart
This paper describes an implementation of narrowing, an essential component of implementations of modern functional logic languages. These implementations rely on narrowing, in particular on some optimal narrowing strategies, to execute functional logic programs. We translate functional logic programs into imperative (Java) programs without an intermediate abstract machine. A central idea of our approach is the explicit representation and processing of narrowing computations as data objects. This enables the implementation of operationally complete strategies (i.e., without backtracking) or techniques for search control (e.g., encapsulated search). Thanks to the use of an intermediate and portable representation of programs, our implementation is general enough to be used as a common back end for a wide variety of functional logic languages.
Constructorbased Conditional Narrowing
 In Proc. of the 3rd International ACM SIGPLAN Conference on Principles and Practice of Declarative Programming (PPDP 2001
, 2001
"... We define a transformation from a leftlinear constructorbased conditional rewrite system into an overlapping inductively sequential rewrite system. This transformation is sound and complete for the computations in the source system. Since there exists a sound and complete narrowing strategy for t ..."
Abstract

Cited by 53 (23 self)
 Add to MetaCart
We define a transformation from a leftlinear constructorbased conditional rewrite system into an overlapping inductively sequential rewrite system. This transformation is sound and complete for the computations in the source system. Since there exists a sound and complete narrowing strategy for the target system, the combination of these results offers the first procedure for provably sound and complete narrowing computations for the whole class of the leftlinear constructorbased conditional rewrite systems. We address the differences between demand driven and lazy strategies and between narrowing strategies and narrowing calculi. In this context, we analyze the efficiency and practicality of using our transformation for the implementation of functional logic programming languages. The results of this paper complement, extend, and occasionally rectify, previously published results in this area. Categories and Subject Descriptors D.1.1 [Programming Techniques]: Applicative (Functional) Programming; D.1.6 [Programming Techniques]: Logic Programming; D.3.3 [Programming Languages]: Language Constructs and FeaturesControl structures; D.3.4 [Programming Languages ]: ProcessorsOptimization; F.4.2 [Mathematical Logic and Formal Languages]: Grammars and Other Rewriting Systems; I.1.1 [Algebraic Manipulation]: Expressions and Their Representation Simplification of expressions; I.2.2 [Automatic Programming ]: Program transformation General Terms Algorithms, Languages, Performance, Theory Keywords Functional Logic Programming Languages, Rewrite Systems, Narrowing Strategies, CallByNeed This work has been supported in part by the National Science Foundation grant INT9981317. 1.
Multiparadigm Declarative Languages
 In Proceedings of the International Conference on Logic Programming (ICLP 2007
, 2007
"... Abstract. Declarative programming languages advocate a programming style expressing the properties of problems and their solutions rather than how to compute individual solutions. Depending on the underlying formalism to express such properties, one can distinguish different classes of declarative l ..."
Abstract

Cited by 37 (17 self)
 Add to MetaCart
Abstract. Declarative programming languages advocate a programming style expressing the properties of problems and their solutions rather than how to compute individual solutions. Depending on the underlying formalism to express such properties, one can distinguish different classes of declarative languages, like functional, logic, or constraint programming languages. This paper surveys approaches to combine these different classes into a single programming language. 1
Strongly Sequential and Inductively Sequential Term Rewriting Systems
, 1998
"... 1 Introduction Michael Hanus Salvador Lucas Aart Middeldorp Strongly sequential and inductively sequential term rewriting systems hanus@informatik.rwthaachen.de slucas@dsic.upv.es ami@score.is.tsukuba.ac.jp first(0,x) [] first(s(x),y::z) y::first(x,z) first x 1 0 s(x) x 2 first x 1 x 2 first 0 x ..."
Abstract

Cited by 29 (14 self)
 Add to MetaCart
1 Introduction Michael Hanus Salvador Lucas Aart Middeldorp Strongly sequential and inductively sequential term rewriting systems hanus@informatik.rwthaachen.de slucas@dsic.upv.es ami@score.is.tsukuba.ac.jp first(0,x) [] first(s(x),y::z) y::first(x,z) first x 1 0 s(x) x 2 first x 1 x 2 first 0 x 2 first s x x 2 [] first s x y z y first x z first inductively sequential outermostneeded strategy needed rewriting needed Definitional trees inductively sequential inductively sequential index trees forwardbranching index trees matching dags outermostneeded strategy index reduction Informatik II, RWTH Aachen, D52056 Aachen, Germany, . Work partially supported by DFG (under grant Ha 2457/11) and Acci'on Integrada. DSIC, U.P. de Valencia, Camino de la Vera s/n, Apdo. 22012, E46071 Valencia, Spain, . Work partially supported by EECHCM grant ERBCHRXCT940624, Bancaixa (BancajaEuropa grant), Acci'on Integrada (HA19970073) and CICYT (under grant TIC 950433C0303). Institute of Informa...
Evaluation Strategies for Functional Logic Programming
 Journal of Symbolic Computation
, 2001
"... . Recent advances in the foundations and the development of functional logic programming languages originate from farreaching results on narrowing evaluation strategies. Narrowing is a computation similar to rewriting which yields substitutions in addition to normal forms. In functional logic pr ..."
Abstract

Cited by 28 (20 self)
 Add to MetaCart
. Recent advances in the foundations and the development of functional logic programming languages originate from farreaching results on narrowing evaluation strategies. Narrowing is a computation similar to rewriting which yields substitutions in addition to normal forms. In functional logic programming, the classes of rewrite systems to which narrowing is applied are, for the most part, subclasses of the constructorbased, possibly conditional, rewrite systems. Many interesting narrowing strategies, particularly for the smallest subclasses of the constructorbased rewrite systems, are generalizations of wellknown rewrite strategies. However, some strategies for larger nonconfluents subclasses have been developed just for functional logic computations. In this paper, I will discuss the elements that play a relevant role in evaluation strategies for functional logic programming, describe some important classes of rewrite systems that model functional logic programs, show examples of the differences in expressiveness provided by these classes, and review the characteristics of narrowing strategies proposed for each class of rewrite systems. 1
A Deterministic Lazy Narrowing Calculus
 Journal of Symbolic Computation
, 1998
"... In this paper we study the nondeterminism between the inference rules of the lazy narrowing calculus lnc (Middeldorp et al., 1996). We show that all nondeterminism can be removed without losing the important completeness property by restricting the underlying term rewriting systems to leftlinear ..."
Abstract

Cited by 23 (4 self)
 Add to MetaCart
In this paper we study the nondeterminism between the inference rules of the lazy narrowing calculus lnc (Middeldorp et al., 1996). We show that all nondeterminism can be removed without losing the important completeness property by restricting the underlying term rewriting systems to leftlinear con uent constructor systems and interpreting equality as strict equality. For the subclass of orthogonal constructor systems the resulting narrowing calculus is shown to have the nice property that solutions computed by di erent derivations starting from the same goal are incomparable. 1.
Specialization of Inductively Sequential Functional Logic Programs
, 1999
"... Functional logic languages combine the operational principles of the most important declarative programming paradigms, namely functional and logic programming. Inductively sequential programs admit the definition of optimal computation strategies and are the basis of several recent (lazy) functional ..."
Abstract

Cited by 21 (11 self)
 Add to MetaCart
Functional logic languages combine the operational principles of the most important declarative programming paradigms, namely functional and logic programming. Inductively sequential programs admit the definition of optimal computation strategies and are the basis of several recent (lazy) functional logic languages. In this paper, we define a partial evaluator for inductively sequential functional logic programs. We prove strong correctness of this partial evaluator and show that the nice properties of inductively sequential programs carry over to the specialization process and the specialized programs. In particular, the structure of the programs is preserved by the specialization process. This is in contrast to other partial evaluation methods for functional logic programs which can destroy the original program structure. Finally, we present some experiments which highlight the practical advantages of our approach. 1 Introduction Functional logic languages combine the operational p...
Specialization of Functional Logic Programs Based on Needed Narrowing
 Proc. of ICFP'99
, 1999
"... Functional logic languages with a complete operational semantics are based on narrowing, a unificationbased goalsolving mechanism which subsumes the reduction principle of functional languages and the resolution principle of logic languages. Needed narrowing is an optimal narrowing strategy and th ..."
Abstract

Cited by 15 (9 self)
 Add to MetaCart
Functional logic languages with a complete operational semantics are based on narrowing, a unificationbased goalsolving mechanism which subsumes the reduction principle of functional languages and the resolution principle of logic languages. Needed narrowing is an optimal narrowing strategy and the basis of several recent functional logic languages. In this paper, we define a partial evaluator for functional logic programs based on needed narrowing. We prove strong correctness of this partial evaluator and show that the nice properties of needed narrowing carry over to the specialization process and the specialized programs. In particular, the structure of the specialized programs provides for the application of optimal evaluation strategies. This is in contrast to other partial evaluation methods for functional logic programs which can change the original program structure in a negative way. Finally, we present some experiments which highlight the practical advantages of our approach.