em(File) :- emas(em,File), reconsult(File). list(Predicate) :- current_predicate(Predicate,Template), clause(Template,Body), nl, list1((Template :- Body)), fail. list(_) :- !. list1((Template :- true)) :- !, numbervars(Template,1,_), print(Template),write('.'),nl. list1((Template :- Body)) :- numbervars((Template :- Body),1,M), print(Template),write(' :-'),nl, list_body(Body). list_body((A,B)) :- !, tab(4), print(A), write(','),nl, list_body(B). list_body(B) :- tab(4), print(B), write('.'),nl. numbervars(Term,N,New) :- Term='$'(N),!, New is N + 1. numbervars(Term,N,N) :- atomic(Term),!. numbervars(Term,N,M) :- functor(Term,F,A), numbervars1(Term,A,N,M). numbervars1(Term,Arity,N,M) :- numbervars1(Term,1,Arity,N,M). numbervars1(Term,Arity,Arity,N,New) :- !, arg(Arity,Term,Arg), numbervars(Arg,N,New). numbervars1(Term,This,Arity,N,M) :- arg(This,Term,Arg), numbervars(Arg,N,Interim), Next is This + 1, numbervars1(Term,Next,Arity,Interim,M). portray('$'(N)) :- integer(N), Alpha is N mod 26, Copy is N/26, character(Alpha,Copy). character(Alpha,0) :- !, A is Alpha+64, name(Letter,[A]), write(Letter). character(Alpha,Copy) :- A is Alpha + 64, name(Letter,[A]), write(Letter),write(Copy). portray(X) :- atomic(X), write(X). portray(X) :- functor(X,F,2), current_op(Y,P,F), arg(1,X,Arg), print(Arg), write(' '),write(F),write(' '), arg(2,X,Arg2), print(Arg2). portray(X) :- functor(X,F,A), write(F),write('('),portray_args(X,A), write(')'). portray_args(Term,Arity) :- portray_args(Term,1,Arity). portray_args(Term,Arity,Arity) :- arg(Arity,Term,Arg), print(Arg). portray_args(Term,This,Arity) :- arg(This,Term,Arg), print(Arg), write(','), Next is This + 1, portray_args(Term,Next,Arity).