An interactive semantics of logic programming