Hello,
 
   I got an unexpected result with setof/3.  However, I'm not sure this is a 
problem or not.  So I reproduced the behavior by repeating the setof/3 example 
found in Prolog: The Standard, Reference Manual, by Deransart, Ed-Dbali, and 
Cervoni, from Springer, 1996, page161.  The example works exactly as described, 
but when I add another parameter to the legs/2 predicate so it becomes legs/3, 
but pass a singleton for the new argument, I get a result I didn't expect and 
it is the same result as if I used a variable instead of the singleton.  See 
the trace from gprolog below.  I was running this on an old P3 with Fedora Core 
2.  See below.
 
Dave
 
[EMAIL PROTECTED] ceg]$ gprolog
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- ['utilities.pl'].
compiling /home/daves/.../utilities.pl for byte code...
/home/daves/.../utilities.pl compiled, 35393 lines read - 1650651 bytes 
written, 2729 ms
 
(629 ms) yes
| ?- assertz((legs(A,6):-insect(A))).
 
yes
| ?- assertz((legs(A,4):-animal(A))).
 
yes
| ?- assertz((legs(A,8):-spider(A))).
 
yes
| ?- assertz((insect(bee))).
 
yes
| ?- assertz((insect(ant))).
 
yes
| ?- assertz((animal(horse))).
 
yes
| ?- assertz((animal(cat))).
 
yes
| ?- assertz((animal(dog))).
 
yes
| ?- assertz((spider(tarantula))).
 
yes
| ?- setof(A,legs(A,N),B).
 
B = [cat,dog,horse]
N = 4 ? ;
 
B = [ant,bee]
N = 6 ? ;
 
B = [tarantula]
N = 8
 
(1 ms) yes
| ?- assertz((legs(A,'abc',6):-insect(A))).
 
yes
| ?- assertz((legs(A,'def',4):-animal(A))).
 
yes
| ?- assertz((legs(A,'ghi',8):-spider(A))).
 
yes
| ?- setof(A,legs(A,_,N),B).
 
B = [ant,bee]
N = 6 ? ;
 
B = [cat,dog,horse]
N = 4 ? ;
 
B = [tarantula]
N = 8
 
(1 ms) yes
| ?- assertz((legs(A,8):-octopus(A))).
 
yes
| ?- assertz((octopus(tarantula))).
 
yes
| ?- setof(A,legs(A,N),B).
 
B = [cat,dog,horse]
N = 4 ? ;
 
B = [ant,bee]
N = 6 ? ;
 
B = [tarantula]
N = 8
(1 ms) yes
| ?- assertz((legs(A,'jkl',8):-spider(A))).
yes
| ?- setof(A,legs(A,_,N),B).
B = [ant,bee]
N = 6 ? ;
B = [cat,dog,horse]
N = 4 ? ;
B = [tarantula]
N = 8 ? ;
B = [tarantula]
N = 8
(1 ms) yes
| ?- setof(A,legs(A,C,N),B).
B = [ant,bee]
C = abc
N = 6 ? ;
B = [cat,dog,horse]
C = def
N = 4 ? ;
B = [tarantula]
C = ghi
N = 8 ? ;
 
B = [tarantula]
C = jkl
N = 8
 
yes
| ?-
 


      
_______________________________________________
Bug-prolog mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-prolog

Reply via email to