My research interest is mainly concentrated in the area of functional logic programming. The aim of functional logic programming is to integrate the best features of both functional and logic programming. Logic programming provides the use of predicates and logical formulas. Logic programs have a great expressive power thanks to the ability of logic languages of computing using logical variables, partial data structures, and an operational mechanism that permits a non deterministic search for answers. Functional programming are based on the concept of function. In a functional program functions are defined by means of equations. The deterministic evaluation of ground expressions increases the efficiency of functional programs. The concept of evaluation strategies, that also increase the efficiency of functional computations, relays on the existence and manipulation of nested terms. The combination of these features makes functional logic languages more expressive than functional languages and more efficient than traditional logic languages.
Actually, I am working along two lines:
My work in this area during the last years was centered in the formalization
of a demand-driven narrowing strategy and the study of the formal relation
between needed narrowing and
this (not so lazy) demand-driven narrowing strategy
which is the basis for popular implementations of non-strict functional
logic languages. Also, I am interested on implementation aspects of narrowing
strategies and on extensions of narrowing (e.g. to non deterministic computations).
Partial evaluation is a program transformation technique, also known as program specialization, that aims to derive a specialized instance of a program w.r.t. a restricted set of inputs. Partial evaluation have been applied to all kind of programming languages, including imperative languages (see here for a standard reference). Partial evaluation of functional logic languages was first formalized by Maria Alpuente and her fellows of the ELP group, I co-authored some of these papers.
Recently I have investigated a program transformation to improve non deterministic computations.
Also I am interested in the application of program transformation techniques in the context of narrowing implementations. The idea is to introduce transformation techniques inside the compilation process in order to improve the quality of the generated compiled code.