One of the most common techniques in Prolog is to use the backtracking in first generating a possible solution then testing the possible solution to see if it is acceptable. If not backtracking takes place so that another possible solution can be generated.
generate_and_test( Info X):-In the above schema the ellipsis (...) indicates a number of subgoals (0 or more)....
generate( Info X)
test( Info X)
...
We can distinguish two kinds of generator: a finite generator and an infinite generator. We will illustrate with two different versions of a non-negative integer generator which we will call int/1 ---we cannot name this integer/1 since this is already defined (as a built-in predicate) and it only works with mode integer(+) and we want int/1 to work with mode int(-).