  Semantics of logic programs has been given by proof theory, model theory and
by fixpoint of the immediate-consequence operator. If clausal logic is a
programming language, then it should also have a compositional semantics.
Compositional semantics for programming languages follows the abstract syntax
of programs, composing the meaning of a unit by a mathematical operation on the
meanings of its constituent units. The procedural interpretation of logic has
only yielded an incomplete abstract syntax for logic programs. We complete it
and use the result as basis of a compositional semantics. We present for
comparison Tarski's algebraization of first-order predicate logic, which is in
substance the compositional semantics for his choice of syntax. We characterize
our semantics by equivalence with the immediate-consequence operator.
