逻辑式程序设计语言

来自计算思维百科
跳转至: 导航搜索

逻辑式程序设计(Logic Programming)源于计算机科学和逻辑学,在人工智能方面有着很广泛的应用。

概念

逻辑式程序设计(Logic Programming)源于计算机科学和逻辑学,在人工智能方面有着很广泛的应用。它的设计思想是:将逻辑直接作为程序设计的语言,并将计算作为受控推理。它是通过依赖于设定某种特定的建立在事实之上的规则来解决问题,而不是通过设定特定的步骤来解决问题。

逻辑程序设计的最早理念可追溯到1932年Alonzo Church表明逻辑推论可以用来编程的论断。这种观点被John McCarthy(1971年图灵奖得主)进一步发展,他提出了用基于逻辑的语言来表达知识,其中advise-taker建议使用可控制的正向逻辑推理。而Planner程序设计语言(1969~1971)同时使用正向推理和反向推理。

Prolog语言

现今最广泛应用的逻辑程序设计语言是Prolog。Prolog建立在形式逻辑中的一阶逻辑之上,不同于其他的编程语言,Prolog是描述性语言,程序的逻辑性通过关系来表达,从而呈现出规则和事实。计算的过程就是在各种关系中启动查询的一个过程。

Prolog语言有以下几个特点:

①Prolog语言是一种描述语言,Prolog求解问题时,只须程序员描述待解问题中的对象及它们之间关系的一些已知事实和规则。强调描述对象之问的逻辑关系,不存在if、when等控制流程语句,只需告诉计算机“do what”,而不是像普通程序设计语言那样告诉计算机“how do”。

②数据和程序结构统一,Prolog语言提供了一种统一的数据结构,称为“项”。所有的程序和数据均由项构成,数据即程序,程序就是数据。

③递归,由于这一特点,一个大的数据结构常常能由一小的程序来处理。

Prolog是由Philippe Roussel使用前缀命名法命名的(在法语中programmation en logique,表示programming in logic),其思想最早(20世纪70年代)由在英国爱丁堡大学的R. Kowalski首先提出,并由M.Van Emden作了模型示范。在1972年,Alain Colmerauer(Prolog之父)与Philippe Roussel及其研究小组在法国马赛大学研制成功了第一个Prolog系统,第一个Prolog的应用于口译,另外David H.D. Warren提出了一个早期影响深远的Prolog编译器Warren抽象机(Warren Abstract Machine),用于定义Prolog的一个变种Edinburgh Prolog,而Edinburgh Prolog提供了大量的现代扩展基本语法。

现代大量的Prolog工程发展来源于FGCS(Fifth Generation Computer System project)的促进,这项工程为它的第一个操作系统开发了Prolog的一个变种语言Kernel Language。Prolog一直在北美和欧洲被广泛使用。日本政府曾经为了建造智能计算机而用Prolog来开发ICOT第五代计算机系统。在早期的机器智能研究领域,Prolog曾经是主要的开发工具。80年代Borland开发的Turbo Prolog,进一步普及了Prolog的使用。

与Prolog相关的语言有:Visual Prolog(我们通常所知的有PDC Prolog和Turbo Prolog)、Datalog(Prolog的一个子集语言,对关系的分层进行限制,并不允许复合形式的关系,相对于Prolog,它是非图灵完备的语言)、AgenSpeak(一种在多代理系统中描述代理习惯的Prolog语言变种)等。

发展

继Prolog之后出现的一个新型的说明性通用逻辑程序设计语言Gödel。在九十年代中期,由英国Bristol大学J.W.Lloyd和Leeds大学的P.M.Hill为代表的研究小组设计开发。Gödel语言借鉴了Prolog和程序设计领域的最新成果,同时引入了类型系统、延迟计算和剪枝操作等诸多新的语言成分,将语言的理论基础扩展到多态多类的一阶逻辑。

现在逻辑式程序设计语言发展的很广泛,有线性逻辑编程语言linear logic,动态模糊逻辑程序设计语言(DFL),有带约束性逻辑编程设计,元逻辑编程,知识表达等。