% 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)]