什么';Prolog规则和查询之间的区别是什么?

什么';Prolog规则和查询之间的区别是什么?,prolog,rules,Prolog,Rules,我是逻辑编程新手,很难理解规则和查询之间的区别,我觉得它们基本上是一样的。如能帮助澄清,我们将不胜感激 查询是您要求证明的语句(在此过程中可能会实例化变量,变量可以作为您的“输出”);规则构成了用于证明的“程序”。规则是一种定义,例如 foo(X) :- bar(X), baz(X). 正如它出现在Prolog程序中一样 查询要么是上述定义的右侧,即(bar(X),baz(X)),要么是您在Prolog解释器提示下键入的使程序运行的内容。您的直觉是正确的:它们都是Horn子句的变体。Horn条

我是逻辑编程新手,很难理解规则和查询之间的区别,我觉得它们基本上是一样的。如能帮助澄清,我们将不胜感激

查询是您要求证明的语句(在此过程中可能会实例化变量,变量可以作为您的“输出”);规则构成了用于证明的“程序”。

规则是一种定义,例如

foo(X) :- bar(X), baz(X).
正如它出现在Prolog程序中一样


查询要么是上述定义的右侧,即
(bar(X),baz(X))
,要么是您在Prolog解释器提示下键入的使程序运行的内容。

您的直觉是正确的:它们都是Horn子句的变体。Horn条款的基本结构是:

head(...) :- body.

如果你有一个没有身体的头,你就有一个事实。如果两者都有,就有一个谓词。如果你只有一个主体,那么你就有一个查询。

从语法上讲,它们基本相同;“
p(1)。
”可以是规则,也可以是查询,具体取决于您将其放置的位置


从语义上讲,它们不是
p(1)。
”作为一条规则,它告诉Prolog“
p(1)
是真的。”
p(1)。
”当一个查询询问Prolog时,“p(1)是真的吗?”

我们不是在解释器中查询同样的事情吗?像
foo(X)
?这是咨询(即
[用户]
)和提示之间的区别。查询提示的行为方式与谓词体的行为方式相同。这就是为什么你需要查阅一个文件来向数据库添加事实和谓词。不,如果两者都有,你就有一个规则。谓词定义是一系列规则。