Results 1  10
of
14
A Practical Partial Evaluation Scheme for MultiParadigm Declarative Languages
 Journal of Functional and Logic Programming
, 2002
"... \Lambda y ..."
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
(Show Context)
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.
Lazy Context Cloning for NonDeterministic Graph Rewriting
 TERMGRAPH 2006
, 2006
"... We define a rewrite strategy for a class of nonconfluent constructorbased term graph rewriting systems and prove its correctness. Our strategy and its extension to narrowing are intended for the implementation of nonstrict nondeterministic functional logic programming languages. Our strategy is ..."
Abstract

Cited by 12 (7 self)
 Add to MetaCart
(Show Context)
We define a rewrite strategy for a class of nonconfluent constructorbased term graph rewriting systems and prove its correctness. Our strategy and its extension to narrowing are intended for the implementation of nonstrict nondeterministic functional logic programming languages. Our strategy is based on a graph transformation, called bubbling, that avoids the construction of large contexts of redexes with distinct replacements, an expensive and frequently wasteful operation executed by competitive complete techniques.
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 9 (5 self)
 Add to MetaCart
(Show Context)
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.
On the correctness of bubbling
 17th International Conference on Rewriting Techniques and Applications (RTA’06
, 2006
"... Abstract. Bubbling, a recently introduced graph transformation for functional logic computations, is wellsuited for the reduction of redexes with distinct replacements. Unlike backtracking, bubbling preserves operational completeness; unlike copying, it avoids the upfront construction of large con ..."
Abstract

Cited by 7 (4 self)
 Add to MetaCart
(Show Context)
Abstract. Bubbling, a recently introduced graph transformation for functional logic computations, is wellsuited for the reduction of redexes with distinct replacements. Unlike backtracking, bubbling preserves operational completeness; unlike copying, it avoids the upfront construction of large contexts of redexes, an expensive and frequently wasteful operation. We recall the notion of bubbling and offer the first proof of its completeness and soundness with respect to rewriting. 1 Introduction Nondeterminism is one of the most appealing features of functional logic programing. A program is nondeterministic when its execution may evaluate some expression that has multiple results. To better understand this concept, considera program to color a map of the Pacific Northwest so that no pair of adjacent states shares a color. The following declarations, in Curry [15], define the wellknown topology of the problem: data State = WA  OR  ID  BC states = [WA,OR,ID,BC] adjacent = [(WA,OR),(WA,ID),(WA,BC),(OR,ID),(ID,BC)] (1)
A modular Equational Generalization Algorithm
, 2008
"... Abstract. This paper presents a modular equational generalization algorithm, where function symbols can have any combination of associativity, commutativity, and identity axioms (including the empty set). This is suitable for dealing with functions that obey algebraic laws, and are typically mechani ..."
Abstract

Cited by 6 (2 self)
 Add to MetaCart
(Show Context)
Abstract. This paper presents a modular equational generalization algorithm, where function symbols can have any combination of associativity, commutativity, and identity axioms (including the empty set). This is suitable for dealing with functions that obey algebraic laws, and are typically mechanized by means of equational atributes in rulebased languages such as ASF+SDF, Elan, OBJ, CafeOBJ, and Maude. The algorithm computes a complete set of least general generalizations modulo the given equational axioms, and is specified by a set of inference rules that we prove correct. This work provides a missing connection between least general generalization and computing modulo equational theories, and opens up new applications of generalization to rulebased languages, theorem provers and program manipulation tools such as partial evaluators, test case generators, and machine learning techniques, where function symbols obey algebraic axioms. A Web tool which implements the algorithm has been developed which is publicly available.
Programming with Narrowing: a Tutorial
"... Narrowing is a computation implemented by some declarative programming languages. Research in the last decade has produced significant results on the theory and foundation of narrowing, but little is published on the use of narrowing in programming. This paper introduces narrowing from a programmer ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
(Show Context)
Narrowing is a computation implemented by some declarative programming languages. Research in the last decade has produced significant results on the theory and foundation of narrowing, but little is published on the use of narrowing in programming. This paper introduces narrowing from a programmer viewpoint; shows, by means of examples, when, why and how to use narrowing in a program; and discusses the impact of narrowing on software development activities such as design and maintenance. The examples are coded in the programming language Curry, which provides narrowing as a first class feature. 1.
ListProcessing Optimizations in Curry
 In Proceedings of the 9th Intl. Workshop on Functional and Logic Programming
, 2000
"... The multiparadigm language Curry integrates features from functional, logic, and concurrent programming. In this work, we consider two wellknown listprocessing optimizations: short cut deforestation (from functional programming) and differencelists (from logic programming), and study their ada ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
The multiparadigm language Curry integrates features from functional, logic, and concurrent programming. In this work, we consider two wellknown listprocessing optimizations: short cut deforestation (from functional programming) and differencelists (from logic programming), and study their adaptation to our integrated setting. While short cut deforestation adapts smoothly, the use of differencelists in Curry is impractical due to the absence of nonstrict equality in the language. Despite all, we have developed a novel transformation which achieves a similar effect over functional logic programs. Both transformations combined together yield a simple and practical method for optimizing listprocessing programs. 1
A Practical Method for Program Specialization in a MultiParadigm Language
, 2000
"... This paper summarizes our findings in the development of partial evaluation tools for Curry, a modern multiparadigm declarative language which combines features from functional programming, logic programming, and concurrent programming. We present a novel approach to perform automatic program speci ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
This paper summarizes our findings in the development of partial evaluation tools for Curry, a modern multiparadigm declarative language which combines features from functional programming, logic programming, and concurrent programming. We present a novel approach to perform automatic program specialization in Curry, which differs from those presented in the literature for the specialization of functional logic languages mainly by considering the translation of the source program into an intermediate language. This is essential in order to express the different features of the language at an appropriate level of abstraction, which allows us to design a simple and concise automatic partial evaluation method covering all the features of the language. Thanks to this simplicity, we have been able to write our partial evaluator in the same language that it partially evaluates (without using any extralogical feature) and, hence, it is amenable to selfapplication (able to specialize itse...