在prolog中查找同一团队中的球员

在prolog中查找同一团队中的球员,prolog,Prolog,我想解决一个序言问题。我正试图把在阿森纳踢球的球员打印出来。我解决不了这个问题 player(rick,arsenal) player(tom,dortmund) player(paul,bayern) player(tim,liverpool) player(john,arsenal) player(andrew,arsenal) 输出必须是: ?- sameteam(????) X= [rick,john,andrew] 首先,您的事实需要以“.”作为正确的Prolog语法终止 p

我想解决一个序言问题。我正试图把在阿森纳踢球的球员打印出来。我解决不了这个问题


player(rick,arsenal)
player(tom,dortmund)
player(paul,bayern)
player(tim,liverpool)
player(john,arsenal)
player(andrew,arsenal)
输出必须是:


?- sameteam(????)

X= [rick,john,andrew]

首先,您的事实需要以“.”作为正确的Prolog语法终止

player(rick,arsenal).
player(tom,dortmund).
player(paul,bayern).
player(tim,liverpool).
player(john,arsenal).
player(andrew,arsenal).
在“关系数据库方式”中,让我们首先收集符合条件“在阿森纳比赛”的基本原子(在“逻辑原子”的意义上,即“事实”)

启动您首选的序言,然后:

?- [user].
|: player(rick,arsenal).
|: player(tom,dortmund).
|: player(paul,bayern).
|: player(tim,liverpool).
|: player(john,arsenal).
|: player(andrew,arsenal).
|: ^D% user://2 compiled 0.00 sec, 6 clauses
true.

?- player(Who,arsenal).
Who = rick ;
Who = john ;
Who = andrew.
现在我们只需要“将它们收集到一个列表中”,我们可以使用
setof/3
轻松做到这一点:

?- setof(Who,player(Who,arsenal),Players).
Players = [andrew, john, rick].
这都是bog标准的“询问数据库”工作

为了便于使用,我们可以将上述内容打包为谓词:

?- [user].
|: sameteam(Players) :- setof(Who,player(Who,arsenal),Players).
|: ^D% user://3 compiled 0.00 sec, 1 clauses
true.

?- sameteam(Players).
Players = [andrew, john, rick].