Prolog 事实在知识库中只出现一次
我有这个知识库: 我想要一个查询,询问一张专辑是否是单曲(只有一首歌) recentSingle(+AlbumId) 如何在整个知识库中搜索并检查它是否只出现一次 回答:Prolog 事实在知识库中只出现一次,prolog,Prolog,我有这个知识库: 我想要一个查询,询问一张专辑是否是单曲(只有一首歌) recentSingle(+AlbumId) 如何在整个知识库中搜索并检查它是否只出现一次 回答: recentSingle(AlbumId) :- album(AlbumId, _, Year, _), Year > 2010, \+ isNotSingle(AlbumId). isNotSingle(AlbumI
recentSingle(AlbumId) :- album(AlbumId, _, Year, _),
Year > 2010,
\+ isNotSingle(AlbumId).
isNotSingle(AlbumId) :- song(AlbumId, Name1, _),
song(AlbumId, Name2, _),
Name1 \= Name2.
请试试这样的东西
recentSingle(X) :- aggregate_all(count, song(X, _, _), Count), Count = 1.
这应该也行
recentSingle(X) :- aggregate_all(count, song(X, _, _), 1).
查询
?-recentSingle(X)。
失败,即使?-recentSingle(a4)。
成功@再次感谢您指出这一点-我仍然只是在学习Prolog。解决办法是什么?你会如何回答这个问题?
recentSingle(X) :- aggregate_all(count, song(X, _, _), Count), Count = 1.
recentSingle(X) :- aggregate_all(count, song(X, _, _), 1).