Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
96 views
in Technique[技术] by (71.8m points)

How to list more than 1 output on prolog query?

Imagine my siblings, my cousins and me and our total count is 10. So i write this code and when i run it, it just give me 1 output. How can i print all the X values(names) on this query. And if possible how can i change what name comes first or how can i choose as a like what 3rd or 5th name would be ? (My granduncle is my grandfather's brother.)

Here is my code and output

granduncle(T,X) :- brother(T,Z),parent(Z,Y),parent(Y,X).


?- granduncle(john,X).
X=stan
question from:https://stackoverflow.com/questions/65855334/how-to-list-more-than-1-output-on-prolog-query

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You need to use the collection predicates:

bagof/3 setof/3

and

findall/3

to collect all the solutions into a single list.

For example:

bagof(X,granduncle(john,X),Bag).

will create a list of solutions in Bag.

Then you can slice & dice the list with predicates like:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...