Prolog - 通过迭代事实创建列表

时间:2013-04-17 12:03:15

标签: list prolog

我是Prolog的新手,想要学习它。我一直在尝试创建一个列表,同时迭代事实,但列表是创建一步后面刷新和丢失数据。如何保留数据并将元素添加到列表中?

funct(a,b,1).
funct(b,c,2).
funct(b,d,3).

creatingList(X,Y,R):- funct(X,Y,A), funct(Y,Z,B), \+member(B,R) , append(R,B,R).

我试过了,但是当我追踪它时会不断丢失数据,我期望R = [1,2,3]。

1 个答案:

答案 0 :(得分:3)

@User是正确的:

?- findall(funct(X,Y,Z), funct(X,Y,Z), Functs).
Functs = [funct(a, b, 1), funct(b, c, 2), funct(b, d, 3)].

setof/3bagof/3也可能适用,但它们的语义稍微复杂一些。