Research Interest

My area of research is narrowing, in particular its use in modern functional logic programming languages. Narrowing is a functional-like step-wise evaluation mechanism that produces results of expressions even when they contain missing or partial information. For example, consider computing length y where length is the function, defined below, that computes the length of a list and y is an unknown list.
length [] = 0
length (x:xs) = 1 + length xs
The functional evaluation of length y produces a result only if y is either the empty list, [], or a non-empty list (x:xs), where x is the head and where xs is the tail. Thus, the evaluation by narrowing of length y, when y is unknown, non-deterministically guesses [] or (x:xs) for y and makes a step of the computation. When, after a step, the result still contains missing or partial information, further narrowing steps are executed to obtain the result.

My tutorial on programming with narrowing contains examples of problems where narrowing is appropriate, implementation code that uses narrowing, and considerations about the use of narrowing in programming.

Currently, I am working along two main lines:

I am maintaining a repository of functional logic design patterns.

This research has been supported in part by the following grants: NSF CCF-1317249, A principled compiler for functional logic languages; NSF CCR-0218224, Implementation of Functional Logic Languages; NSF CCR-0110496, Non-Deterministic Computations for Functional Logic Programs; NSF INT-9981317, Advanced Techniques for Multi-Paradigm Declarative Languages; NSF CCR-9406751, Needed Narrowing Strategies.