% Example: bag_of/3 in cu-Prolog 
bagof(T,G,S) :-
	assert(bagOfTmp([])),
	apnd(G,[retract(bagOfTmp(U)),assert(bagOfTmp([T|U])),fail],NG),
	not(execute(NG)), retract(bagOfTmp(S)).

%% :-bagof(X,[memb(X,[a,b,c])],S).
%%   X = T_10  S = [c,b,a]
%%_:-bagof(f(X),[memb(X,[a,b,c])],S).
%%  X = X_10  S = [f(c),f(b),f(a)]


syntax highlighted by Code2HTML, v. 0.9.1