On the semantics of meta-programming and the control of partial deduction in logic programming