【问题标题】:Prolog setOf with Multiple Predicates带有多个谓词的 Prolog setOf
【发布时间】:2021-02-07 01:10:42
【问题描述】:

在我的 prolog 数据库中,我有以下事实:

played('Sharon rose', piano).
played('Robert Kay', piano).
played('Kelvin Cage', drums).
singer('Robert Kay').
band_leader('Sharon rose').

我想将所有名称唯一地打印为一个列表。

下面是我使用 setof 的查询和输出:

setof(X, (played(X,_);singer(X);band_leader(X)), Output).

Output = ['Robert Kay','Sharon rose'] ? ;

Output = ['Kelvin Cage'] ? ;

Output = ['Robert Kay','Sharon rose']

yes

但是,输出不是我想要的。 我希望它以列表的形式唯一地打印出名称。

【问题讨论】:

  • 您打算将Drums 设为Drums 还是drums
  • 它是鼓(小写字母“d”,而不是“Drums”),是一个错字。感谢您注意到这一点。我更正了。

标签: prolog prolog-setof


【解决方案1】:

由于setof/3 的目标参数中的匿名变量,您会得到多个答案。试试吧:

?- setof(X, Y^(played(X,Y);singer(X);band_leader(X)), Output).

【讨论】:

  • 我错过了关于参数 setof/3 的匿名变量的概念。谢谢,现在可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多