In the context of Prolog, meta-programming refers to the destruction and construction of rules and terms, and the examination and modification of the rulebase. All of the same issues arise in CLP( ). However, some extra facilities are needed because of the special nature of arithmetic terms and constraints. Furthermore, some of the remaining ones must be modified. For example, without such extra facilities and modifications, there is no way that a CLP( ) program can distinguish the two terms p(3 - 1) and p(1 + 1) since they are semantically identical.
More specifically, the extra facilities and modifications are needed to: