2/*
    3
    4 a(A,B|Rest) = a(x,y)    
    5
    6
    7 A=x,B=y,Rest='@'().
    8
    9
   10
   11 a(A,B|Rest) = a(x,y,z,1)
   12
   13 A=x,B=y,Rest='@'(z,1).
   14
   15
   16
   17 a(A,B|Rest) = a(x,y,z|Rest2)
   18
   19 A=x,B=y,Rest='@'(z|Rest2),Rest2 = _.
   20
   21*/
   22
   23extendable_compound(PT,Ex):- 
   24   put_attr(Ex,'$VAR$',Ex), % make extensable
   25   put_attr(Ex,partial_term,ec(Ex,PT,_More)).
   26
   27partial_term:attr_unify_hook(ec(Ex,PT,More),Value):-
   28  partial_univ(Value,ValueL),
   29  partial_univ(Partial,PartialL),
   30  ValueL=PartialL.
   31
   32partial_univ(Partial,PartialL):-
   33   Partial=..PartialM,append(PartialM,_,Partial