Stepwise Development of Operational and Denotational Semantics for Prolog