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_termattr_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