2012-12-04 166 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)),但它不起作用,讓我錯誤? –