Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 事实在知识库中只出现一次_Prolog - Fatal编程技术网

Prolog 事实在知识库中只出现一次

Prolog 事实在知识库中只出现一次,prolog,Prolog,我有这个知识库: 我想要一个查询,询问一张专辑是否是单曲(只有一首歌) recentSingle(+AlbumId) 如何在整个知识库中搜索并检查它是否只出现一次 回答: recentSingle(AlbumId) :- album(AlbumId, _, Year, _), Year > 2010, \+ isNotSingle(AlbumId). isNotSingle(AlbumI

我有这个知识库:

我想要一个查询,询问一张专辑是否是单曲(只有一首歌)

recentSingle(+AlbumId)

如何在整个知识库中搜索并检查它是否只出现一次

回答:

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).