@INPROCEEDINGS{HanusSteiner98PLILPALP,
author = "Hanus, M. and Steiner, F.",
title = "Controlling Search in Declarative Programs",
year = "1998",
pages = "374-390",
publisher = "Springer LNCS 1490",
booktitle = "Principles of Declarative Programming (Proc. Joint
             International Symposium PLILP/ALP'98)"
abstract = {
Logic languages can deal with non-deterministic computations via built-in
search facilities. However, standard search methods
like global backtracking are often not sufficient and
a source of many programming errors. Therefore, we propose
the addition of a single primitive to logic-oriented languages
to control non-deterministic computation steps.
Based on this primitive, a number of different search
strategies can be easily implemented.
These search operators can be applied if the standard search
facilities are not successful or to encapsulate search.
The latter is important if logic programs interact
with the (non-backtrackable) outside world.

We define the search control primitive based on an
abstract notion of computation steps so that it can be
integrated into various logic-oriented languages, but to
provide concrete examples
we also present the integration of such a control primitive
into the multi-paradigm declarative language Curry.
The lazy evaluation strategy
of Curry simplifies the implementation of search strategies,
which also shows the advantages of integrating functions into
logic languages.
}
}

