freeze/2 and nb_setarg/3 interaction

Michael Hendricks <[email protected]> Wed, 9 Apr 2014 08:58:20 -0600
Newsgroups gmane.comp.ai.prolog.swi
Message-ID <CAFHuXua8iYB2RJWsC1C7ygYxuvDwSB_ZSC=CyHKLMoEpVdPkZw@mail.gmail.com>
freeze/2 and nb_setarg/3 seem not to work together.  Consider this example:


correct :-
    X=[_|_],
    ( nb_setarg(1,X, a),
      nb_setarg(2,X, [b,c]),
      writeln(X),
      fail
    ; writeln(X)
    ).

broken :-
    X=[H|T],
    freeze(H,nb_setarg(1,X,H)),
    freeze(T,nb_setarg(2,X,T)),
    ( H = a,
      T = [b,c],
      writeln(X),
      fail
    ; writeln(X)
    ).


?- correct.
[a,b,c]
[a,b,c]
true.

?- broken.
[a,b,c]
[_G1009|_G1010]
true.

Is that expected behavior?

-- 
Michael
-------------- next part --------------
HTML attachment scrubbed and removed