:- module(uutil, [ op(800,fy, $), ($)/1, ($)//1, (^)/3, (^)/4, seq//1, seqq//1, (...)//0 ]). :- meta_predicate ^(?,0,?). ^(Xs, Goal, Xs) :- call(Goal). :- meta_predicate ^(?,1,?,?). ^(Xs0, Goal, Xs0, Xs) :- call(Goal, Xs). ... --> [] | [_], ... . seq([]) --> []. seq([E|Es]) --> [E], seq(Es). seqq([]) --> []. seqq([Es|Ess]) --> seq(Es), seqq(Ess). :- op(950,fy, [$]). $(X) :- copy_term_nat(X,Y),numbervars(Y,0,_),portray_clause(call:Y), X, copy_term_nat(X,Z),numbervars(Z,0,_),portray_clause(exit:Z). %$(X) :- % copy_term_nat(X,Y),numbervars(Y,0,_),portray_clause(fail:Y), % fail.