首先我们先了解什么是人工智能语言
人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。能够用它来编写程序求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。典型的人工智能语言主要有LISP、Prolog、Smaltalk、C++++等。
一般来说,人工智能语言应具备如下特点:
•具有符号处理能力(即非数值处理能力);
•适合于结构化程序设计,编程容易;
•具有递归功能和回溯功能;
•具有人机交互能力;
•适合于推理;
•既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。
人们可能会问,用人工智能语言解决问题与传统的方法有什么区别呢?
传统方法通常把问题的全部知识以各种的模型表达在固定程序中,问题的求解完全在程序制导下按着预先安排好的步骤一步一步(逐条)执行。解决问题的思路与冯。诺依曼式计算机结构相吻合。当前大型数据库法、数学模型法、统计方法等都是严格结构化的方法。
对于人工智能技术要解决的问题,往往无法把全部知识都体现在固定的程序中。通常需要建立一个知识库(包含事实和推理规则),程序根据环境和所给的输入信息以及所要解决的问题来决定自己的行动,所以它是在环境模式的制导下的推理过程。这种方法有极大的灵活性、对话能力、有自我解释能力和学习能力。这种方法对解决一些条件和目标不大明确或不完备,(即不能很好地形式化,不好描述)的非结构化问题比传统方法好,它通常采用启发式、试探法策略来解决问题。
那么Lisp和Prolog哪个更值得学习,哪个功能更强大自从五十年代麻省理工学院研制出LlSP以来,LISP一直是美国的主要人工智能语言。Prolog是七十年代初在欧洲研制出来的,为欧洲人工智能研究者所选用的语言。此外,日本第五代机计划也选用Prolog作为它的软件开发语言。在加利福尼亚州Calabasas的Hughes研究所Corporate人工智能中心帮助开发内部专家系统的老科学家Douglas Partridge 预言,“这是一个复杂的问题,它所牵涉的许多事情,即使不影响八十年代后几年,也会影响下五年的工业。”他认为,以Prolog 及其方言为代表的逻辑程序设计正潜入美国人工智能领域。但是,他怀疑,这种语言能否“与人们在研制专家系统时要用的问题求解方法一致。
LISP的许多鼓吹者很不相信Prolog。他们难以捉摸日本人为什么选用Prolog开发第五代机的软件。有人说,“日本人犯了一个严重的错误。Prolog 是研究问题的好工具,它太受其先天结构的限但对一些重要应用,
制。”越来越多的美国人转向Prol0B这一事实表明,持这种态度是由于一般错误地理解了Prolog与逻辑程序设计。有些研究人员花了数年时间学习LSP,因此对它很有感情。
两种语言并非都人人中意,避开lisp与prolog之争不谈,对这两个语言的常处于短处的看法是一致的。开发prolog软件的Quintus计算机公司软件技术董事长William Kornfeld 说,“prolog用起来很简单,用他编程要比用lisp容易得多。Lisp是一个非常复杂的语言,要求程序员极其熟练”然而他指出,在最初设计prolog的时候,某些决策限制了他所擅长处理的问题类....”。关于Lisp和Prolog区别以及争议我将在下文进行分析。
关于LISP语言(1)LISP具有和图灵机相同的(也就是理论上最高的)计算能力;在计算机科学的可计算理论中,人们已经证明递归函数和图灵机具有相同的(也就是理论上最高的)计算能力,通常指的是自然数集上的递归函数。这个结论对符号集上的递归函数也成立。J.McCarthy在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详细介绍
Prolog(Programming in Logic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现已广泛的应用在人工智能的研究中,可以用来建造专家系统、自然语言理解、智能知识库等。同时对一些通常的应用程序的编写也很有帮助,能够比其他的语言更快速地开发程序,因为它的编程方法更象是使用逻辑的语言来描述程序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)