我想问一个关于返回列表的问题...... 事实:
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 ......但是我想要一个像上面这样的列表......
非常感谢...
答案 0 :(得分:0)
要从子句数据库中提取满足谓词的项列表,应使用findall
谓词。例如,您的代码可以按如下方式重写:
find(T, N, G) :- findall(X, (team(X, _, N, G0), G0 > G), T).