2011-05-02 16 views
0

名單我想提一個問題有關返回列表... 事實:回到在序言

TEAM(TEAMNAME,導演,NATIOANALITY,OVERALLGOAL)

team (milan,allegri,italy, 8.5). 
team (inter,benitez,italy,7.6). 
team (barcelona,guardiola,spain,7.8). 
team (realmadrid,mourinho,spain,7.2). 

,我想創建一個謂詞: 查找(T,N,G):T是隊的名稱,N是隊的國籍和該球隊的overallgoal必須大於G.更大和輸出必須是這樣的:

find([], spain,9). returns true

find(X, spain,6). returns X=[barcelona, realmadrid]

我試着這樣做:

find(T,N,G):-find1(T,N,G),is_set(T). 

find1([]). 

find1([T|Ts],N,G):-team(T,_,N,Gs),Gc>G,find1(Ts). 

它給出的結果,但如果我的目標是找到不喜歡上面的輸出... ([],西班牙,9)。然後給假... 如果我的目標是發現(X,西班牙,6)。然後先給X =巴塞羅那並等待「;」之後,讓X =皇馬...但我希望像上面列表...

非常感謝......

回答

0

要提取條款的數據庫滿足謂詞的項目清單,一個應該使用findall謂詞。例如,你的代碼可以改寫如下:

find(T, N, G) :- findall(X, (team(X, _, N, G0), G0 > G), T). 
+0

非常感謝你墊.... – Palindrom 2011-05-02 14:47:14

+1

'SETOF/3'而應被用在這裏。 – false 2014-12-08 21:43:31