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