可能是一个奇怪而广泛的问题,而不是 100% 的编程问题,但我希望这没问题。我最近进行了一次讨论,Prolog 中的许多程序 don\xc2\xb4t 遵循严格的谓词逻辑(弗雷格的),但通常是“面向对象”,我试图掌握这一点。
\n我知道 Prolog 基于一阶谓词逻辑,尤其是 Horn 子句,它们是肯定前件的特殊形式。如果事实和规则单独出现,那么它们只是从句,但是一旦我添加多个出现,它们就成为谓词。
\n一阶谓词逻辑的量量如何表示并与事实、规则、谓词或一般的 Prolog 概念相关?函子表达什么以及与谓词逻辑相关的参数是什么。Prolog 中如何体现谓词逻辑和一阶谓词逻辑?Prolog 将它们的概念留在哪里?例如,我如何在谓词逻辑和一阶谓词逻辑中定义点、线和垂直线。
\n我如何在谓词逻辑和一阶谓词逻辑中表述这一点,它们之间的语义和逻辑区别是什么
\nvertical(line).\nline(vertical).\nRun Code Online (Sandbox Code Playgroud)\n或者本例中的线和点。点和线不是谓词逻辑吗?\n对我来说,它是“点(X)所有点的集合”,当我选择一个具体点时,“存在一个点(110, 12)”。
\npoint(X,Y).\nline(point(W,X), point(Y,Z)).\n\nvertical(line(point(X,Y), point(X,Z))).\nhorizontal(line(point(X,Y), point(Z,Y))).\nRun Code Online (Sandbox Code Playgroud)\n任何信息都有帮助!非常感谢,H
\nW.Clocksin 和 C.Mellish 的一章Programming in Prolog专门解释了 Prolog 与逻辑的关系。从那里引用
如果我们想讨论 Prolog 与逻辑的关系,我们必须首先确定逻辑的含义。逻辑最初被设计为一种表示论证形式的方式,以便可以以正式的方式检查它们是否有效。因此,我们可以使用逻辑来表达命题、命题之间的关系以及如何有效地从其他命题推断出某些命题。我们将在这里讨论的逻辑的特殊形式称为谓词演算。我们在这里只能说几句话。有许多很好的逻辑基础介绍,您可以参考这些内容作为背景阅读。
如果我们希望表达关于世界的命题,我们必须能够描述其中涉及的对象。在谓词演算中,我们用 术语来表示对象。术语具有以下形式之一:
- 一个常数符号。这是代表单个个体或概念的符号。我们可以将其视为 Prolog 原子,并且我们将使用 Prolog 语法。所以希腊、阿加莎和和平是永恒的象征。
- 一个变量符号。这是一个我们可能想在不同时间代表不同个体的象征。变量实际上只是与量词一起引入,这将在下面讨论。我们可以将它们视为 Prolog 变量并使用 Prolog 语法。因此
X、Man、 和Greek是变量符号。- 复合词。复合项由一个函数符号以及作为其参数的一组有序项组成。这个想法是,复合项代表某个个体,该个体依赖于参数所代表的个体。函数符号表示第一个函数如何依赖第二个函数。例如,我们可以有一个代表“距离”概念的函数符号和两个参数。在这种情况下,复合项代表参数所表示的对象之间的距离。我们可以将复合项视为 Prolog 结构,其中函数符号为函子。我们将使用 Prolog 语法编写谓词演算复合术语,例如,
wife(henry)可能表示亨利的妻子,distance(point1, X)可能表示某个特定点和其他要指定的地点之间的距离,classes(mary, dayafter(W))可能表示玛丽当天教授的课程某天后W指定。因此,在谓词演算中,表示对象的方式与 Prolog 中可用的方式一样。
将整个章节放在这里似乎不合适...附录 B 中还有一个非常具有解释性的程序,它执行WFF到子句的自动翻译。
这本书的可读性很强,只是遗憾的是它不在免费 Prolog 编程书籍部分的标题之列。