Re: Strange variables...

Salvador Pinto Abreu <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
while not really a solution to your problem, a workaround is to use the compiler (ie. gplc) instead of consulting.
you don't get debugging but performance is way better.

21:13:32$ gplc -o xx xx.pl 
21:13:38$ ./xx 
GNU Prolog 1.4.4 (64 bits)
Compiled Aug 27 2014, 09:59:03 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?- p5(X).

X = [1,3] ? a

X = [1,3]

X = [2,3]

X = [2,3]

yes
| ?- 


> On 08 Jan 2015, at 19h57, Fred Bapst <[email protected]> wrote:
> 
> 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}
> 
> 
> _______________________________________________
> Users-prolog mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/users-prolog
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.