bf(Goal):-
	bf_listof(X,clause(Goal,X),L_g)),
	bf_s(L_g).
bf_listof(X,clause(Goal,X),[])):- \+ Goal,!.
bf_listof(X,clause(Goal,X),L_g)):- 
	setof(X,clause(Goal,X),L)),
	bf_lisser(L,L_g).












aplat((X,Y),[X|Z]):-aplat(Y,Z).
aplat((X),[X]).
p:-p1(x,Y),!,p2,p3.
p:-p0.
p.
s(L):-setof(X,clause(p,X),L).
structure(T):- functor(T,X,N), name(X,[44]).
lisser([X|Y],Z):-lisser(X,X1),lisser(Y,Y1),conc(X1,Y1,Z).
lisser(X,Y):-structure(X),aplat(X,Y).
lisser([],[]).
lisser(X,[X]):-not(structure(X)).

conc([],X,X).
conc([X|R],Y,[X|Z]):-conc(R,Y,Z).
test:-s(L),lisser(L,R).
