prolog - 带有多个谓词的 Prolog setOf
问题描述
在我的序言数据库中,我有以下事实:
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
但是,输出不是我想要的。我希望它以列表的形式唯一地打印出名称。
解决方案
由于 的目标参数中的匿名变量,您会得到多个答案setof/3
。改为尝试:
?- setof(X, Y^(played(X,Y);singer(X);band_leader(X)), Output).
推荐阅读
- jmeter - 如何在使用 Jmeter 进行性能测试期间在测试运行之间获取结果 csv 文件?
- arrays - Laravel 输入对象数组到 api 路由
- python - Django:如何向模型类添加“设置和保存”方法?
- xamarin - 带有 MVVMCross 和 Storyboard 的本机 Xamarin.IOS 应用程序无法正常工作
- visual-studio - UWP 的访问权限
- angular - 如何在 iisnode 上部署 Angular 通用应用程序
- mysql - 如何获取登录错误消息以在 Ruby on Rails 5.2 中工作?
- wso2 - WSO2物联网服务器修改
- vb.net - 嗨,我正在做一个电子抽奖项目
- android - Android短信权限问题