【发布时间】:2012-02-07 19:20:19
【问题描述】:
我是逻辑编程的新手,很难理解规则和查询之间的区别,我觉得它们基本相同。任何帮助澄清这一点将不胜感激。
【问题讨论】:
我是逻辑编程的新手,很难理解规则和查询之间的区别,我觉得它们基本相同。任何帮助澄清这一点将不胜感激。
【问题讨论】:
在语法上,它们大体相同; “p(1).”可以是规则也可以是查询,具体取决于您放置的位置。
从语义上讲,它们不是。
“p(1).”作为一个规则告诉 Prolog “p(1) 是真的”。
“p(1).”作为一个查询 问 Prolog “是 p(1) 是真的吗?”。
【讨论】:
规则是一个定义,例如
foo(X) :- bar(X), baz(X).
就像在 Prolog 程序中出现的那样。
查询要么是上述定义的右侧,即(bar(X), baz(X)),要么是您在 Prolog 解释器提示符下键入以使程序运行的内容。
【讨论】:
foo(X)?
[user])和提示之间的区别。查询提示的行为方式与谓词的主体相同。这就是为什么您需要查阅文件以将事实和谓词添加到数据库中。
查询是您要求证明的语句(在此过程中可能会实例化变量,这些变量可以作为您的“输出”);规则构成了用于开发该证明的“程序”。
【讨论】:
您的直觉是正确的:它们都是 Horn 子句的变体。 Horn子句的基本结构是:
head(...) :- body.
如果你有一个没有身体的头脑,你就有一个事实。如果两者都有,则有谓词。如果你只有一个身体,那么你就有一个查询。
【讨论】: