freeze(X,Goal),var(X),{ins(X)} => true. freeze(X,Goal) => call(Goal).If X is a variable, the agent freeze(X,Goal) is delayed. When X is bound, an event ins(X) is posted automatically, which will in turn activate the agent freeze(X,Goal). If X is not a variable, then the second rule will rewrite freeze(X,Goal) into call(Goal). Note that, since agents can never succeed more than once, Goal in freeze(X,Goal) cannot return multiple solutions. This is a big difference from the freeze predicate in Prolog-II.
T1 #\= T2
.