Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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
Python 计算正确答案的数量并检查..序言_Python_Prolog_Google Colaboratory - Fatal编程技术网

Python 计算正确答案的数量并检查..序言

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数据库中添加一个谓词,用于查找少于2种常见类型的所有电影。


我得到了一个空列表,尽管在我的数据库中有满足这个谓词的答案。

当你在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] )