1:- module(aop_helpers,[
    2  extend/3,
    3  contract/2
    4  ]).    5
    6% 
    7% General helpers
    8% 
    9
   10% Add Context to a term as the first argument, e.g., 
   11% Term(Args) becomes Term(Context,Args...)
   12extend(Context,Term,Extended) :-
   13  is_list(Context),
   14  Term =.. [Functor|Args],
   15  append(Context, Args, ExtendedArgs),
   16  Extended =.. [Functor | ExtendedArgs],
   17  !.
   18
   19% Add Context to a term as the first argument, e.g., 
   20% Term(Args) becomes Term(Context,Args...)
   21extend(Context,Term,Extended) :-
   22  Term =.. [Functor|Args],
   23  Extended =.. [Functor, Context | Args].
   24
   25contract(Term, Contracted) :-
   26  Term =.. [Functor|Args],
   27  Args = [_Drop|ContractedArgs],
   28  Contracted =.. [Functor|ContractedArgs]