Programming with Narrowing

Narrowing is a computation implemented by some declarative program6 ming languages. Research in the last decade has produced significant results on the 7 theory and foundation of narrowing, but little is published on the use of narrowing 8 in programming. This paper introduces narrowing from a programmer viewpoint; 9 shows, by means of examples, when, why and how to use narrowing in a program; 10 and discusses the impact of narrowing on software development activities such as 11 design and maintenance. The examples are coded in the programming language 12 Curry, which provides narrowing as a first class feature. 13

[1]  Nachum Dershowitz,et al.  Equational programming , 1988 .

[2]  Hassan Aït-Kaci,et al.  An Overview of LIFE , 1990, East/West Database Workshop.

[3]  John W. Lloyd,et al.  Programming in an Integrated Functional and Logic Language , 1999, J. Funct. Log. Program..

[4]  Niklaus Wirth,et al.  Program development by stepwise refinement , 1971, CACM.

[5]  Jean-Pierre Jouannaud,et al.  Rewrite Systems , 1991, Handbook of Theoretical Computer Science, Volume B: Formal Models and Sematics.

[6]  Corrado Moiso,et al.  Kernel-LEAF: A Logic plus Functional Language , 1991, J. Comput. Syst. Sci..

[7]  Juan José Moreno-Navarro,et al.  Logic Programming with Functions and Predicates: The Language BABEL , 1992, J. Log. Program..

[8]  Uday S. Reddy,et al.  Narrowing as the Operational Semantics of Functional Languages , 1985, SLP.

[9]  Sergio Antoy Constructor-based conditional narrowing , 2001, PPDP '01.

[10]  Michael Hanus,et al.  The Integration of Functions into Logic Programming: From Theory to Practice , 1994, J. Log. Program..

[11]  Michael Hanus,et al.  An implementation of narrowing strategies , 2001, PPDP '01.

[12]  Francisco Javier López-Fraguas,et al.  TOY: A Multiparadigm Declarative System , 1999, RTA.

[13]  Michael Hanus,et al.  A unified computation model for functional and logic programming , 1997, POPL '97.

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

[15]  Sergio Antoy,et al.  Evaluation strategies for functional logic programming , 2001, J. Symb. Comput..

[16]  Samson Abramsky,et al.  Handbook of logic in computer science. , 1992 .

[17]  Leon Sterling,et al.  The Art of Prolog , 1987, IEEE Expert.

[18]  Jean-Marie Hullot,et al.  Canonical Forms and Unification , 1980, CADE.

[19]  Ralf Hinze,et al.  Haskell 98 — A Non−strict‚ Purely Functional Language , 1999 .

[20]  Rachid Echahed,et al.  A needed narrowing strategy , 2000, JACM.

[21]  Michael Hanus,et al.  Curry: an integrated functional logic language (version 0 , 2003 .

[22]  Wolfgang Lux Implementing Encapsulated Search for a Lazy Functional Logic Language , 1999, Fuji International Symposium on Functional and Logic Programming.

[23]  Michael J. O'Donnell,et al.  Computing in systems described by equations , 1977, Lecture Notes in Computer Science.

[24]  Chang Liu,et al.  Term rewriting and all that , 2000, SOEN.

[25]  Enno Ohlebusch,et al.  Term Rewriting Systems , 2002 .

[26]  Michael Hanus,et al.  Compiling Multi-Paradigm Declarative Programs into Prolog , 2000, FroCoS.

[27]  Donald Michie,et al.  Machine intelligence 11 , 1988 .

[28]  Richard S. Bird,et al.  Introduction to functional programming , 1988, Prentice Hall International series in computer science.

[29]  Michael J. O'Donnell,et al.  Equational Logic as a Programming Language , 1985, Logic of Programs.

[30]  Sergio Antoy Optimal Non-deterministic Functional Logic Computations , 1997, ALP/HOA.