| Nobukuni Kino 2004-12-30, 8:57 pm |
| Take a look at http://www.kprolog.com/en/logical_assignment/
Here is an almost portable, almost logical implementation of
predicate set that may replace destructive assignment predicates.
assignable(X) makes X an assignable term,
X<=V makes the value of assignable term X to V(old values backed up),
X<+V commits the value of X to V (no backup to choice point),
X=>V unifies the value of X with V.
It is important that there is a compatible implementation that
does not use any destructive assignment builtin predicate. The
implementation is slow but logical. It is also important that
the faster implementation uses setarg/3, but hides the differences
between setarg/3 implementations successfully.
A list permutation example,
listPermutor(P,[a,b,c]),
listPermute(P,L1),
listPermute(P,L2),
listPermute(P,L3),
results L1=[a,b,c],L2=[a,c,b],L3=[b,a,c].
No backtracking required to generate these results, and no
destructive assignment required, when the slower implement is
used.
Wish you a Happy New Year,
--
Nobukuni Kino, KLS Research,Inc. kino@kprolog.com
|