For Programmers: Free Programming Magazines  


Home > Archive > Prolog > December 2004 > A small improvement of destructive assignment









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author A small improvement of destructive assignment
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
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com