Python 计算正确答案的数量并检查..序言
我想在prolog数据库中添加一个谓词,用于查找少于2种常见类型的所有电影。Python 计算正确答案的数量并检查..序言,python,prolog,google-colaboratory,Python,Prolog,Google Colaboratory,我想在prolog数据库中添加一个谓词,用于查找少于2种常见类型的所有电影。 我得到了一个空列表,尽管在我的数据库中有满足这个谓词的答案。当你在Prolog REPL中查询这个问题时,它能工作吗?这会告诉你这是Prolog方面的问题还是Python方面的问题。我只在google的colaboratory上试过。我已经把它放进了SWISH。现在您可以在不增加python开销的情况下进行实验了havesamegenre/2按预期工作(只要你的流派/2事实不包含变量),但not_relative_流
我得到了一个空列表,尽管在我的数据库中有满足这个谓词的答案。当你在Prolog REPL中查询这个问题时,它能工作吗?这会告诉你这是Prolog方面的问题还是Python方面的问题。我只在google的colaboratory上试过。我已经把它放进了SWISH。现在您可以在不增加python开销的情况下进行实验了
havesamegenre/2
按预期工作(只要你的流派/2
事实不包含变量),但not_relative_流派/2
不会给出你想要的答案。作为下一步,您可以将aggregate
目标作为一个查询,查看它是否符合您的要求,并添加更多目标,直到解决方案丢失为止。这将是一个很有希望的调试点。我不确定非相对类型表达了什么,但我的直觉是有一个更简单的解决方案。(我的印象是你很接近SQL,你首先创建一个所有解决方案的列表并对其进行过滤。这通常是在Prolog中很难做到的,尽管它总是无法避免)not_relative_流派/2应该得到两部电影作为输入,并说明它们是否有一个或没有共同的流派。您建议什么解决方案?当您在Prolog REPL中查询此问题时,它是否有效?这会告诉你这是Prolog方面的问题还是Python方面的问题。我只在google的colaboratory上试过。我已经把它放进了SWISH。现在您可以在不增加python开销的情况下进行实验了havesamegenre/2
按预期工作(只要你的流派/2
事实不包含变量),但not_relative_流派/2
不会给出你想要的答案。作为下一步,您可以将aggregate
目标作为一个查询,查看它是否符合您的要求,并添加更多目标,直到解决方案丢失为止。这将是一个很有希望的调试点。我不确定非相对类型表达了什么,但我的直觉是有一个更简单的解决方案。(我的印象是你很接近SQL,你首先创建一个所有解决方案的列表并对其进行过滤。这通常是在Prolog中很难做到的,尽管它总是无法避免)not_relative_流派/2应该得到两部电影作为输入,并说明它们是否有一个或没有共同的流派。你有什么建议?
prolog.assertz('(havesamegenre(X, Y) :- genre(X, G), genre(Y, G), X \= Y )')
prolog.assertz('(not_relative_genre(X, Y) :- aggregate_all(count, havesamegenre(X ,Y), Count), X \= Y, Count < 2)')
movie = "Star Wars: Episode III - Revenge of the Sith"
q = prolog.query("not_relative_genre('" + movie +"',M)")
ans = []
for soln in q:
if soln["M"] not in ans:
ans.append(soln["M"])
print (ans[:10] )