Prolog - 简介



Prolog,顾名思义,是LOGical PROgramming的缩写。它是一种逻辑型和声明式编程语言。在深入研究Prolog的概念之前,让我们首先了解什么是逻辑编程。

逻辑编程是计算机编程范式中的一种,其中程序语句表达了系统中不同问题的事实和规则,这些规则以形式逻辑的形式表达。在这里,规则以逻辑子句的形式编写,其中包含头部和主体。例如,H是头部,B1、B2、B3是主体的元素。现在,如果我们说“当B1、B2、B3都为真时,H为真”,这就是一条规则。另一方面,事实类似于规则,但没有主体。因此,事实的一个例子是“H为真”。

一些逻辑编程语言,如Datalog或ASP(Answer Set Programming),被称为纯声明式语言。这些语言允许声明程序应该完成什么。没有关于如何执行任务的逐步说明。但是,其他语言,如Prolog,既具有声明性也具有命令性。这可能还包括过程语句,例如“要解决问题H,执行B1、B2和B3”。

下面给出了一些逻辑编程语言:

  • ALF(代数逻辑函数式编程语言)。

  • ASP(Answer Set Programming)

  • CycL

  • Datalog

  • FuzzyCLIPS

  • Janus

  • Parlog

  • Prolog

  • Prolog++

  • ROOP

逻辑和函数式编程

我们将讨论逻辑编程和传统的函数式编程语言之间的区别。我们可以使用下图来说明这两者:

Logic and Functional Programming

从这个图中,我们可以看出,在函数式编程中,我们必须定义过程以及过程的工作方式。这些过程一步一步地解决基于算法的特定问题。另一方面,对于逻辑编程,我们将提供知识库。使用这个知识库,机器可以找到给定问题的答案,这与函数式编程完全不同。

在函数式编程中,我们必须说明如何解决一个问题,但在逻辑编程中,我们必须指定我们实际想要解决的问题。然后逻辑编程会自动找到一个合适的解决方案来帮助我们解决那个特定问题。

现在让我们看看下面的一些区别:

函数式编程 逻辑编程
函数式编程遵循冯·诺依曼架构,或使用顺序步骤。 逻辑编程使用抽象模型,或处理对象及其关系。
语法实际上是语句的序列,如(a,s,I)。 语法基本上是逻辑公式(Horn子句)。
计算通过顺序执行语句来进行。 它通过演绎子句来计算。
逻辑和控制混合在一起。 逻辑和控制可以分离。

什么是Prolog?

Prolog或PROgramming in LOGics是一种逻辑型和声明式编程语言。它是第四代语言的主要示例之一,支持声明式编程范式。这尤其适用于涉及符号非数值计算的程序。这是使用Prolog作为人工智能编程语言的主要原因,其中符号操作推理操作是基本任务。

在Prolog中,我们不需要说明如何解决一个问题,我们只需要说明问题是什么,以便Prolog自动解决它。但是,在Prolog中,我们应该给出作为解决方案方法的线索。

Prolog语言基本上有三个不同的元素:

事实 - 事实是为真的谓词,例如,如果我们说“Tom是Jack的儿子”,那么这是一个事实。

规则 - 规则是包含条件子句的事实的扩展。要满足规则,必须满足这些条件。例如,如果我们定义一个规则如下:

grandfather(X, Y) :- father(X, Z), parent(Z, Y)

这意味着,对于X成为Y的祖父,Z必须是Y的父母,而X必须是Z的父亲。

问题 - 并且要运行一个Prolog程序,我们需要一些问题,这些问题可以通过给定的事实和规则来回答。

Prolog的历史

Prolog的渊源包括对定理证明器和其他一些在20世纪60年代和70年代开发的自动化演绎系统的研究。Prolog的推理机制基于罗宾逊在1965年提出的分辨率原理,以及格林(1968年)提出的答案提取机制。这些想法随着线性分辨率程序的出现而强有力地结合在一起。

明确的目标导向线性分辨率程序推动了通用逻辑编程系统的开发。第一个Prolog是马赛Prolog,它基于Colmerauer在1970年的工作。这个马赛Prolog解释器的手册(Roussel,1975)是对Prolog语言的第一个详细描述。

Prolog也被认为是一种支持声明式编程范式的第四代编程语言。著名的日本第五代计算机项目于1981年宣布,采用Prolog作为开发语言,从而引起了人们对该语言及其能力的广泛关注。

Prolog的一些应用

Prolog用于各个领域。它在自动化系统中发挥着至关重要的作用。以下是Prolog的其他一些重要应用领域:

  • 智能数据库检索

  • 自然语言理解

  • 规范语言

  • 机器学习

  • 机器人规划

  • 自动化系统

  • 问题解决

广告