谁能做一下LISP和PROLOG的比较

栏目:资讯发布:2023-09-30浏览:4收藏

谁能做一下LISP和PROLOG的比较,第1张

(1)LISP具有和图灵机相同的(也就是理论上最高的)计算能力;

在计算机科学的可计算理论中,人们已经证明递归函数和图灵机具有相同的(也就是理论上最高的)计算能力,通常指的是自然数集上的递归函数。这个结论对符号集上的递归函数也成立。JMcCarthy在LISP中设计了一套符号处理函数,它们具有符号集上的递归函数的计算能力,因此原则上可以解决人工智能中的任何符号处理问题。

(2)数据类型的唯一性,程序与数据的一致性;

LISP的数据类型和句法结构简单,甚至简单到具有唯一性和一致性:其数据和程序的表现形式是一样的, 都是用S-表达式一种形式基本的数据结构是表(表是S-表达式的特例)。

(3)数据和程序的 等价性;

LISP的数据和程序不仅类型一致,而且作用也等价;

即:程序可作为数据被处理,数据也可作为程序来执行。

(4)LISP一切功能由函数来实现,程序的运行就是求值;

LISP程序的通常形式是一串函数定义,其后跟着一串带有参数的函数调用,函数之间的关系只是在调用执行时才体现出来。

(5)LISP语言的控制结构以递归为主;

大多数语言使用的控制结构是以循环为主的,有的程序语言允许递归,而LISP以递归形式为主。递归是LISP能力的源泉。当然现在LISP也有循环结构和迭代。

(6)原子可以有任意多个值(特性值);

LISP非常重要的一个特点是每个文字原子可以加许多特性,每个特性有一个特性表及对应的特性值。由于原子的多值性给使用者带来很多方便,给问题表示带来好处,使LISP很好用。

(7)LISP具有表的结构形式和规模的灵活性,不必预先设定;

(8)具有收集无用单元的功能。

//--------------------------------------------------------------------

prolog语言

(1)WHAT型语言;

Prolog 由程序设计的“How to do the Job”向 “What you want to do”前进一步。用户只要说明已知事实是什么,定义规则(说明对象间的关系),再告诉要解决的问题是什么(询问)就行了,不必告诉计算机如何一步一步做,问题的求解是通过Prolog的内部机制自动生成。

(2) 基于一阶谓词逻辑,既有坚实的理论基础,又有较强的表现能力;

Prolog的文法简单,描述能力强,更接近于自然语言,程序易写易读,程序量小。

(3) Prolog自动实现模式匹配(合一功能),自动回溯,这两种是人工智能系统中常用的基本操作;

(4)内部的回溯能力及不确定性使Prolog对同一个问题可给出多个解;

Prolog具有不确定的原因有二个:①过程性的不确定性:Prolog谓词调用是用模式匹配方式、自顶向下的深度优先搜索自动回溯策略,当变元值不满足谓词时产生回溯,求得变元之另一值,如此下去直到谓词为真;②变元特性的不确定性:系指谓词中变元既可用来作输入变元又可作输出变元的这种性质。变元特性的非确定性引起提问方式的多样性,增强了交互能力(会话能力)。过程的不确定性和变元特性的不确定性,这是传统程序设计语言以及另一种AI语言LISP所不具备的智能特性。

(5)Prolog的数据和程序的统一,Prolog提供了一种统一的数据结构--项(term),用来构造数据和程序。数据和程序并没有明显区别,同样存在数据库中。并且提供了修改数据库的指令ADDCL和DELCL,在程序执行中,可以自行修改数据、改变控制,因而可以编制能自行修改程序和数据的程序,为实现某些智能提供了方便;

(6)递归是Prolog语言的重要特点之一。

缺点:

(1)在编译系统实现问题上,在执行效率低问题上,在系统开销大的问题上,Prolog遇到了比LISP更大的困难;

由于深度优先算法,由于控制机制具有普遍性,由于递归和自动回溯,Prolog程序中间变量过多严重浪费内存,对具体的问题不免有多余的回溯,因而浪费了较多的机器时间和空间,降低了效率。

(2) 大型的Prolog程序调试不容易;

Prolog算法都是深度优先搜索和自动回溯,在程序执行过程中细节由系统内部掌握,减少了人设计控制的工作。但反过来,用户很难或根本无法控制算法的细节,对程序控制的唯一途径是通过“cut”操作(但cut影响了prolog的完备性)。因此大型prolog程序比LISP程序调试困难得多。

(3) Prolog的“not”是“失败的not”,不是逻辑否定,只有在封闭世界假设基础上才能认为是逻辑否定。Prolog对量词的处理也不够。它视所有规则前面有对规则中所有变元的全称量词,而视询问公式前有对询问中变元的存在量词。但实际应用中封闭世界假设不一定合适。

(4) Prolog是描述笥语言,处理的是关系,因而在过程性控制方面局限性较大。

但目前不少国家已经实现了Prolog和LISP语言之间或它们与传统语言之间的转换软件接口。所以在过程控制方面也有推广使用Prolog的,例如PC-Prolog。又如,POPLOG是LISP、PROLOG和POP-11的混合物,其中允许这三种语言写的程序互相调用。也有以一种程序设计风范为主、引进并兼顾另一种风范的,例如LOGLISP(以LISP结构为基础,加进逻辑程序成分的)。

Prolog(Programming in logic)是一种面向演绎推理的逻辑型程序设计语言,最早于1972年由柯尔麦伦纳(Colmeraner)及其研究小组在法国马赛大学提出。[1]

高济,何钦铭著,人工智能基础 (第二版),高等教育出版社,200810,第67页

中文名

逻辑编程语言

外文名

Programming in logic

简称

Prolog

定义

面向演绎推理的逻辑型语言

提出时间

1972年

关于逻辑编程语言

Prolog以处理一阶谓词演算为背景,由于其简单的文法、丰富的表达力和独特的非过程语言的特点,很适合用来表示人类的思维和推理规则,从而一问世就赢得了人工智能研究和应用开发者的广泛兴趣。尤其在西欧和日本,Prolog语言已推广应用于许多应用领域,如关系数据库、数理逻辑、抽象问题求解、自然语言理解和专家系统等。日本还在其于1979年提出的第五代计算机研究计划中把Prolog列为核心语言。

Prolog实际上就是一种基于逆向规则的演绎推理技术,只不过对规则和目标的表示有严格的限制.再加上演绎推理控制机制自身的简单性,难以适用于复杂的应用域。[1]

Prolog语言的基本概念

Prolog语言的基本成分是Horn子句,表示为如下形式:

 

  

  

  

 

p;

Prolog语言中,Horn子句以3种形式去分别表示逆向演绎推理中问题求解描述的3个部分:目标、规则和事实。

目标

表示为只有左部的Horn子句:

 

  

  

  

即在Prolog语言中,目标公式只限于表示为原子公式的合取,而不能是任意的文字与或形。

规则

表示为典型的Horn子句:

 

  

  

  

 

p

这就是逆向演绎推理所使用的规范化B规则,只是规则左部限定为原子公式的合取,而非任意文字与或形。

事实

事实表示为事实元素的集合,每个事实元素表示为只有右部的Horn子句,即单一原子公式P。事实元素间隐含合取关系。

只要用Prolog语言表示问题描述的这3个部分,支持Prolog语句的推理机制就会自动执行基于规则的逆向演绎推理,并最终给出。

一、Prolog(Programming in Logic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现已广泛的应用在人工智能的研究中,可以用来建造专家系统、自然语言理解、智能知识库等。同时对一些通常的应用程序的编写也很有帮助,能够比其他的语言更快速地开发程序,因为它的编程方法更象是使用逻辑的语言来描述程序。

prolog程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程序的人。

prolog程序中没有if、when、case、for这样的控制流程语句

prolog程序和数据高度统一

prolog程序实际上是一个智能数据库

强大的递归功能

二、结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

三、一般而言,prolog作为数据或者逻辑处理程序而运行,配合其它程序如VC++、JAVA等的界面,由此实现带UI交互的“智能”软件,当然你所编辑出来的“智能”是软件,而不能说是真正意义的人工智能。上文说Prolog就是一个智能数据库,其实不然,Prolog主要是对数据进行一种关系描述,比如张三和李四是A关系,李四和王二是B关系,A关系==B关系,那么Prolog则擅长处理这种逻辑上的数据关系,不能和SQL混为一谈,所以说,Prolog的用途是来处理数据之间关系的,而不是存储数据本质的存在。

prolog语言的三种基本语句是事实;规则;询问。

PROLOG语言(逻辑编程语言)一般指逻辑编程语言。Prolog(Programming in logic)是一种面向演绎推理的逻辑型程序设计语言,最早于1972年由柯尔麦伦纳(Colmeraner)及其研究小组在法国马赛大学提出。

Prolog以处理一阶谓词演算为背景,由于其简单的文法、丰富的表达力和独特的非过程语言的特点,很适合用来表示人类的思维和推理规则,从而一问世就赢得了人工智能研究和应用开发者的广泛兴趣。

尤其在西欧和日本,Prolog语言已推广应用于许多应用领域,如关系数据库、数理逻辑、抽象问题求解、自然语言理解和专家系统等。日本还在其于1979年提出的第五代计算机研究计划中把Prolog列为核心语言。

Prolog实际上就是一种基于逆向规则的演绎推理技术,只不过对规则和目标的表示有严格的限制。再加上演绎推理控制机制自身的简单性,难以适用于复杂的应用域。

特点

Prolog语言的语法结构相当简单,但描述能力很强。例如,当事实和规则描述的是某一学科公理。那么问题就是待证的命题;当事实和规则描述的是某些数据和关系,那么问题就是数据查询语句;当事实和规则描述的是某些状态变化规律,那么问题就是目标状态。

因此,Prolog语言是一种智能型程序设计语言。Prolog程序没有特定的运行顺序,程序运行顺序完全按照数理逻辑推导的方式进行。而不是由编程序的人决定。Prolog是一种描述型语言,用特定的方法描述一个问题,然后由计算机自动找到这个问题的答案。

谁能做一下LISP和PROLOG的比较

(1)LISP具有和图灵机相同的(也就是理论上最高的)计算能力; 在计算机科学的可计算理论中,人们已经证明递归函数和图灵机具有相同的(...
点击下载
热门文章
    确认删除?
    回到顶部