2012-12-04 127 views
0

我有一个问题我想要一个代码Prolog,因为我将用predicate“assert”生成新的谓词,但是我想使用谓词的结果。 我有一个谓词来计算列表的元素数量,因此它是 ,我必须创建一个新的谓词,使用我的知识库中的谓词“断言”为谓词“creat_nbStation”调用谓词“谁将使用2“assert”和“compte”例如我有creat_nbStation(L),L是一个Liste,它将使我在知识库中添加一个新的谓词,它使用断言谓词nb_Station(L,25)。如何在谓词中使用谓词“assert”

谢谢你的帮助。 这是我的谓词计数列表元素的数量和它worka完美

compte([],0). 
compte([_|R],N) :- compte(R,N1), N is N1+1, N>0. 
+0

序言的“断言”内置谓语通常被用来模拟全局变量,允许调用中间结果从回溯的健忘效应“保存”。也许你想用动态谓词'nb_Station/2'来做这种事情。但是我发现很难理解你在这里提出的具体问题。 – hardmath

回答

0

这是相当困难找出你寻找什么,但我必须说,它看起来非常像功课分配。这是你想要的?

create_nbStation(L) :- compte(L, N), assert(nbStation(L, N)). 
+0

是的非常感谢你,它的工作完全符合我的要求。我想使用assert在我的知识库中添加新的预测nb_station非常感谢你 –

+0

现在我尝试使用它来添加所有的电台,我有木匠findall我解释更多为例我有10站和我想要使用creat_nbStation(L)作为我拥有的所有电台,但是这会让我出错creat_nbStation(findall(ligne(L,_,_,_)): - compte(L,N), assert(nbStation(L,N))。你能帮助我吗?我想用这个,因为我不必一直打电话给所有的时间与findall他将使单独谢谢 –

+0

现在我正在尝试做对于我所有的电台我解释更多我有1à站台(名称,类型,Liste),我想为我所有的电台使用这个creat_nbStation,所以我用findall但是当我做出这样的“creat_nbStation(findall(station(X ,_,L)): - compte(L,N),断言(nbStation(X,N)),但它不起作用,让我错误? –