We introduce a methodology and framework for expressing general preference information in
logic programming under the answer set semantics. An ordered logic program is an extended
logic program in which rules are named by unique terms, and in which preferences among
rules are given by a set of atoms of form s [pr ] t where s and t are names. An ordered logic
program is transformed into a second, regular, extended logic program wherein the preferences
are respected, in that the answer sets obtained in the transformed program correspond with
the preferred answer sets of the original program. Our approach allows the specification
of dynamic orderings, in which preferences can appear arbitrarily within a program. Static
orderings (in which preferences are external to a logic program) are a trivial restriction of
the general dynamic case. First, we develop a specific approach to reasoning with preferences,
wherein the preference ordering specifies the order in which rules are to be applied. We
then demonstrate the wide range of applicability of our framework by showing how other
approaches, among them that of Brewka and Eiter, can be captured within our framework.
Since the result of each of these transformations is an extended logic program, we can make
use of existing implementations, such as dlv and smodels. To this end, we have developed a
publicly available compiler as a front-end for these programming systems.