once/1 is defined as once(X):- call(X),!.
once/1 should be used with care in tabled programs. The compiler
can not determine whether a tabled predicate is called in the
scope of once/1, and such a call may lead to runtime errors.
If a tabled predicate may occur in the scope of once/1, use
Exceptions: The same as call/1.