Results 1  10
of
14
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
Systematic generation of glassbox test cases for functional logic programs
 IN: PROC. OF THE 9TH INTERNATIONAL ACM SIGPLAN SYMPOSIUM ON PRINCIPLES AND PRACTICE OF DECLARATIVE PROGRAMMING, ACM PRESS
, 2007
"... We employ the narrowingbased execution mechanism of the functional logic programming language Curry in order to automatically generate a system of test cases for glassbox testing of Curry programs. The test cases for a given function are computed by narrowing a call to that function with initially ..."
Abstract

Cited by 19 (2 self)
 Add to MetaCart
We employ the narrowingbased execution mechanism of the functional logic programming language Curry in order to automatically generate a system of test cases for glassbox testing of Curry programs. The test cases for a given function are computed by narrowing a call to that function with initially uninstantiated arguments. The generated test cases are produced w.r.t. a selected codecoverage criterion such as controlflow coverage. Besides an adaption of the notion of controlflow coverage to functional (logic) programming, we present a novel coverage criterion for this programming paradigm. A particular difficulty of the adaption is the handling of laziness.
On the tighter integration of functional and logic programming
, 2007
"... Abstract. The integration of functional and logic programming is a well developed field of research. We discuss that the integration could be improved significantly in two separate aspects: sharing computations across nondeterministic branching and the declarative encapsulation of logic search. We ..."
Abstract

Cited by 17 (2 self)
 Add to MetaCart
Abstract. The integration of functional and logic programming is a well developed field of research. We discuss that the integration could be improved significantly in two separate aspects: sharing computations across nondeterministic branching and the declarative encapsulation of logic search. We then present a formal approach which shows how these improvements can be realized and prove the soundness of our approach. 1
EasyCheck — Test Data for Free
, 2008
"... We present a lightweight, automated tool for specificationbased testing of declarative programs written in the functional logic programming language Curry and emphasize the usefulness of logic features in its implementation and use. Free variables, nondeterminism and encapsulated search turn out to ..."
Abstract

Cited by 13 (2 self)
 Add to MetaCart
We present a lightweight, automated tool for specificationbased testing of declarative programs written in the functional logic programming language Curry and emphasize the usefulness of logic features in its implementation and use. Free variables, nondeterminism and encapsulated search turn out to be elegant and powerful means to express testdata generation.
Set Functions for Functional Logic Programming
, 2009
"... We propose a novel approach to encapsulate nondeterministic computations in functional logic programs. Our approach is based on set functions that return the set of all the results of a corresponding ordinary operation. A characteristic feature of our approach is the complete separation between a u ..."
Abstract

Cited by 11 (11 self)
 Add to MetaCart
We propose a novel approach to encapsulate nondeterministic computations in functional logic programs. Our approach is based on set functions that return the set of all the results of a corresponding ordinary operation. A characteristic feature of our approach is the complete separation between a usuallynondeterministic operation and its possiblynondeterministic arguments. This separation leads to the first provably orderindependent approach to computing the set of values of nondeterministic expressions. The proof is provided within the framework of graph rewriting in constructorbased systems. We propose an abstract implementation of our approach and prove its independence of the order of evaluation. Our approach solves easily and naturally problems mishandled by current implementations of functional logic languages.
Transforming functional logic programs into monadic functional programs
 In Workshop on Functional and (Constraint) Logic Programming, Draft Proceedings
, 2010
"... Abstract. We present a highlevel transformation scheme to translate lazy functional logic programs into pure Haskell programs. This transformation is based on a recent proposal to efficiently implement lazy nondeterministic computations in Haskell into monadic style. We build on this work and defi ..."
Abstract

Cited by 5 (2 self)
 Add to MetaCart
Abstract. We present a highlevel transformation scheme to translate lazy functional logic programs into pure Haskell programs. This transformation is based on a recent proposal to efficiently implement lazy nondeterministic computations in Haskell into monadic style. We build on this work and define a systematic method to transform lazy functional logic programs into monadic programs with explicit sharing. This results in a transformation scheme which produces highlevel and flexible target code. For instance, the target code is parametric w.r.t. the concrete evaluation monad. Thus, different monad instances could, for example, define different search strategies (e.g., depthfirst, breadthfirst, parallel). We formally describe the basic compilation scheme and some useful extensions. 1
Implementing Relational Specifications in a Constraint Functional Logic Language
 Electronic Notes in Theoretical Computer Science
, 2007
"... We show how the algebra of (finite, binary) relations and the features of the integrated functional logic programming language Curry can be employed to solve problems on relational structures (like orders, graphs, and Petri nets) in a very highlevel declarative style. The functional features of Cur ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
We show how the algebra of (finite, binary) relations and the features of the integrated functional logic programming language Curry can be employed to solve problems on relational structures (like orders, graphs, and Petri nets) in a very highlevel declarative style. The functional features of Curry are used to implement relation algebra and the logic features of the language are combined with BDDbased solving of boolean constraints to obtain a fairly efficient implementation of a solver for relational specifications.
Reporting Failures in Functional Logic Programs
 In Proc. of the 15th International Workshop on Functional and (Constraint) Logic Programming (WFLP 2006
, 2006
"... Computing with failures is a typical programming technique in functional logic programs. However, there are also situations where a program should not fail (e.g., in a deterministic toplevel computation) but the evaluation fails accidentally, e.g., due to missing pattern combinations in an operatio ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Computing with failures is a typical programming technique in functional logic programs. However, there are also situations where a program should not fail (e.g., in a deterministic toplevel computation) but the evaluation fails accidentally, e.g., due to missing pattern combinations in an operation defined by pattern matching. In this case, the program developer is interested in the context of the failed program point in order to analyze the reason of the failure. Therefore, this paper discusses techniques for reporting failures and proposes a new one that has been integrated in a Prologbased compiler for the declarative multiparadigm language Curry. Our new technique supports separate compilation of modules, i.e., the compilation of modules has not taken into account whether failures should be reported or not. The failure reporting is only considered in some linking code for modules. In contrast to previous approaches, the execution of programs in the failure reporting mode causes only a small overhead so that it can be also used in larger applications.
Constructive Failure in FunctionalLogic Programming: From Theory to Implementation 1
"... Abstract: Functionallogic programming amalgamates some of the main features of both functional and logic styles into a single paradigm. Nevertheless, negation is a widely investigated feature in logic programming that has not received much attention in such programming style. It is not difficult to ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Abstract: Functionallogic programming amalgamates some of the main features of both functional and logic styles into a single paradigm. Nevertheless, negation is a widely investigated feature in logic programming that has not received much attention in such programming style. It is not difficult to incorporate some kind of negation as finite failure for ground goals, but we are interested in a constructive version able to deal with nonground goals. With this aim, in previous works we have built a formal framework for checking (finite) failure of reduction. In this paper we adapt it for implementing a prototype for a functionallogic language with constructive failure as the natural counterpart to negation in logic programming.
Search Strategies for Functional Logic Programming
"... Abstract: In this paper we discuss our practical experiences with the use of different search strategies in functional logic programs. In particular, we show that complete strategies, like breadthfirst search or iterative deepening search, are a viable alternative to incomplete strategies, like dep ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
Abstract: In this paper we discuss our practical experiences with the use of different search strategies in functional logic programs. In particular, we show that complete strategies, like breadthfirst search or iterative deepening search, are a viable alternative to incomplete strategies, like depthfirst search, that have been favored in the past for logic programming languages. 1