简体   繁体   English

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

[英]Prolog - Creating a list by iterating facts

I am new in Prolog and wanted to learn it. 我是Prolog的新手,想学习它。 I have been trying to create a list while iterating facts but list that was created one step back refreshing and lost the data. 我一直在尝试遍历事实时创建一个列表,但是创建的列表向后刷新并丢失了数据。 How can I keep the data and add elements to list? 如何保存数据并向列表中添加元素?

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).

I tried that , but when I trace it keeps losing data, which I expect is R = [1,2,3]. 我试过了,但是当我跟踪时,它一直在丢失数据,我期望它是R = [1,2,3]。

@User is correct: @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/3 and bagof/3 might also apply, but their semantics are a little more complex. setof/3bagof/3可能也适用,但是它们的语义稍微复杂一些。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM