Strange variables...

Fred Bapst <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
I'm observing a rather strange behaviour (GnuProlog 1.4.4 on Windows and Linux,
idem for older versions) and I'm not able to completely isolate it; it seems to
be related to singleton variables and backtracking. Here is a stupid code
demonstrating the issue:

%--------------
z(A,B, A,B).
z(A,B, B,A).

p5(Ls):-
    _ = [B, C],
    % write(B), % write(C),
    Ls = [A, E],
    z(A, _, 1, 2),
    E=3,
    z(A, _, B, C).

%--------------

Asking for every solution leads to an infinite loop...

  ?- p5(X).
  X = [1,3] ? a
     ...... [infinine loop].....

Writing B and C removes the problem; and writing only one of them leads to
another strange behavior.

Running the call with the tracer also changes the behavior, and reveals
strange d(...) sub-terms:

{trace}
| ?- p5(X).
      1    1  Call: p5(_23) ?
      2    2  Call: z(_53,_57,1,2) ?
      2    2  Exit: z(1,2,1,2) ?
      3    2  Call: z(1,_85,_126,_127) ?
      3    2  Exit: z(1,_85,1,_85) ?
      1    1  Exit: p5([1,3]) ?
X = [1,3] ? a
      1    1  Redo: p5([1,3]) ?
      3    2  Redo: z(1,_85,1,_85) ?
      3    2  Exit: z(1,_85,_85,1) ?
      1    1  Exit: p5([1,3]) ?
X = [1,3]
      1    1  Redo: p5([1,3]) ?
      2    2  Redo: z(1,2,1,2) ?
      2    2  Exit: z(2,1,1,2) ?
      3    2  Call:
z(2,_85,d(3,[a(z(2,_85,d(3,[a(z(2,_85,...),3,2,...),a(p5(...),1,...)]),2),3,2,144),a(p5([2,3]),1,1,87)]),2)
?
      3    2  Exit:
z(2,d(3,[a(z(2,d(3,[a(z(2,d(...,...),...),3,2,...),a(p5(...),1,...)]),d(3,[a(z(2,d(...,...),...),3,2,...),a(p5(...),1,...)]),2),3,2,144),a(p5([2,3]),1,1,87)]),d(3,[a(z(2,d(3,[a(z(2,d(...,...),...),3,2,...),a(p5(...),1,...)]),d(3,[a(z(2,d(...,...),...),3,2,...),a(p5(...),1,...)]),2),3,2,144),a(p5([2,3]),1,1,87)]),2)
?
      1    1  Exit: p5([2,3]) ?
X = [2,3]
(16 ms) yes
{trace}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.