Functional notation and lazy evaluation in Ciao

Certain aspects of functional programming provide syntactic convenience, such as having a designated implicit output argument, which allows function cali nesting and sometimes results in more compact code. Functional programming also sometimes allows a more direct encoding of lazy evaluation, with its ability to deal with infinite data structures. We present a syntactic functional extension of Prolog covering function application, predefined evaluable functors, functional definitions, quoting, and lazy evaluation. The extension is also composable with higher-order features. We also highlight the Ciao features which help implementation and present some data on the overhead of using lazy evaluation with respect to eager evaluation.

[1]  Manuel V. Hermenegildo,et al.  A Simple Approach to Distributed Objects in Prolog , 2002 .

[2]  Juan José Moreno-Navarro,et al.  BABEL: A Functional and Logic Programming Language based on Constructor Discipline and Narrowing , 1988, ALP.

[3]  M. Hanus,et al.  Curry: An Integrated Functional Logic Language , 2003 .

[4]  Manuel V. Hermenegildo,et al.  A New Module System for Prolog , 2000, Computational Logic.

[5]  Roberto Barbuti,et al.  On the Integration of Logic Programming and Functional Programming , 1984, SLP.

[6]  Peter Van Roy,et al.  The Wonder Years of Sequential Prolog Implementation , 1996 .

[7]  V HermenegildoManuel,et al.  Integrated program debugging, verification, and optimization using abstract interpretation (and the Ciao system preprocessor) , 2005 .

[8]  Dr. Pierre Deransart,et al.  Prolog: The Standard , 1996, Springer Berlin Heidelberg.

[9]  Sanjai Narain,et al.  Lazy evaluation in logic programming , 1990, Proceedings. 1990 International Conference on Computer Languages.

[10]  Zoltan Somogyi,et al.  The Execution Algorithm of Mercury, an Efficient Purely Declarative Logic Programming Language , 1996, J. Log. Program..

[11]  Mats Carlsson,et al.  SICStus Prolog User''s Manual , 1993 .

[12]  Peter Van Roy,et al.  1983-1993: The Wonder Years of Sequential Prolog Implementation , 1994, J. Log. Program..

[13]  Manuel V. Hermenegildo,et al.  Integrated program debugging, verification, and optimization using abstract interpretation (and the Ciao system preprocessor) , 2005, Sci. Comput. Program..

[14]  Manuel V. Hermenegildo,et al.  Hiord: A Type-Free Higher-Order Logic Programming Language with Predicate Abstraction , 2004, ASIAN.

[15]  Lee Naish,et al.  Adding equations to NU-Prolog , 1991, PLILP.

[16]  Manuel V. Hermenegildo,et al.  Implementing Distributed Concurrent Constraint Execution in the CIAO System , 1996, APPIA-GULP-PRODE.

[17]  Sergio Antoy,et al.  Lazy Evaluation in Logic , 1991, PLILP.

[18]  Giorgio Levi,et al.  The Relation between Logic and Functional Languages: A Survey , 1986, J. Log. Program..

[19]  Manuel V. Hermenegildo,et al.  Improved Compilation of Prolog to C Using Moded Types and Determinism Information , 2004, PADL.

[20]  Mats Carlsson,et al.  Freeze, Indexing, and Other Implementation Issues in the WAM , 1987, ICLP.

[21]  D. Cabezas,et al.  Un sistema de programación lógica extensible y con soporte para análisis global (an extensible, global analysis friendly logic programming system) , 2004 .

[22]  Manuel V. Hermenegildo,et al.  An Assertion Language for Constraint Logic Programs , 2000, Analysis and Visualization Tools for Constraint Programming.