在prolog中返回一个列表

时间:2011-05-02 14:12:32

标签: prolog

我想问一个关于返回列表的问题...... 事实:

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

我想创建一个谓词: find(T,N,G):T是团队名称,N是团队的国籍,该团队的整体目标必须大于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 = realmadrid ......但是我想要一个像上面这样的列表......

非常感谢...

1 个答案:

答案 0 :(得分:0)

要从子句数据库中提取满足谓词的项列表,应使用findall谓词。例如,您的代码可以按如下方式重写:

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