Procedural programming requires that the programmer tell the computer what to do. That is, how to get the output for the range of required inputs. The programmer must know an appropriate algorithm.
Declarative programming requires a more descriptive style. The programmer must know what relationships hold between various entities.
Pure
Prolog allows a program to be read either declaratively
or procedurally.
This dual semantics is attractive.