Prolog(Programming in Logic的缩写(xiě))是一种逻(luó)辑编程语言(yán)。它建(jiàn)立在逻辑(jí)学的理论(lùn)基础之上, 最初被(bèi)运用于(yú)自然语言等研究(jiū)领域。现已(yǐ)广(guǎng)泛的应用在人工(gōng)智能的研究(jiū)中,可(kě)以用来建造专(zhuān)家(jiā)系统、自(zì)然语言理解、智能知识库等。同时对一些通(tōng)常的应用程序(xù)的编写也很有帮助,能够比其他的(de)语言更快速(sù)地开发程序,因为它的编程方法(fǎ)更(gèng)象是使(shǐ)用逻辑的语言来描述程序(xù)。

1. prolog程序没有(yǒu)特定的运行顺序,其(qí)运行顺序是由电脑决定的(de),而不是编程序的人。
从这个意义上(shàng)来说(shuō),prolog程序不是真正(zhèng)意义上的程序。所谓程序就是按照一定的步骤运行的计算(suàn)机指令,而prolog程序的运(yùn)行(háng)步(bù)骤不由人来决定。它更像一种(zhǒng)描(miáo)述型的语言,用特定(dìng)的方法描述(shù)一个问题,然后由电脑自动找到(dào)这个问题的答案。举个极端的例子(zǐ),你只需(xū)要把(bǎ)某个数(shù)学题(tí)目告诉它,它(tā)就会自动的找到答案(àn),而(ér)不像使用其他的(de)语言(yán)一(yī)样,必须人(rén)工的编制出某种(zhǒng)算法。
2. prolog程序中没(méi)有if、when、case、for这样的控制流程语句(jù)
前面已经说了,程序的运(yùn)行(háng)方(fāng)式有电(diàn)脑(nǎo)自己决定,当然(rán)就用(yòng)不到这些控(kòng)制(zhì)流程的语(yǔ)句了。通常情况下,程序(xù)员不需要了解程(chéng)序的运行过程,只需要(yào)注重程序(xù)的描述是否全面,不过prolog也提供了一些(xiē)控制流程的(de)方法,这些方法和其他语言中的方法有很大的区别,希望你(nǐ)在(zài)以(yǐ)后的学习当中(zhōng)能够(gòu)融会贯通(tōng)。
3. prolog程(chéng)序和数据(jù)高度统一
在prolog程序中,是很难(nán)分清楚哪些是程序(xù),哪些是数据的。事实上,prolog中的所有东西都有相同的形(xíng)式,也就是说(shuō)数据就是程序,程序就是(shì)数(shù)据。举一(yī)个其他语(yǔ)言的例子:如果想用c语言编写一个计算某个数学表达式(shì)的程序很简单(比如:a=2+5*4),因为(wéi)这是一段(duàn)程序。但(dàn)是如果想编写一个计算(suàn)用户(hù)输入的表达(dá)式的值的(de)程序就很困难了。因(yīn)为(wéi)用户(hù)输入的是一(yī)段数据(jù)(字符串),如果(guǒ)想让c语言(yán)处理这个字符串,就需要很多方面的(de)技术。则正是因为在c语言中,程序和数据是分开的。而在(zài)prolog就不(bú)存(cún)在这个问题,你甚(shèn)至可(kě)以(yǐ)很轻(qīng)松的编写处理其它prolog程(chéng)序的程序(xù)。
4. prolog程序(xù)实际上是一(yī)个智能(néng)数据库(kù)
prolog的原理(lǐ)就(jiù)是关系数据库(kù),它(tā)是建立在(zài)关系数据库的基础上的(de)。在以后的学习(xí)中你会发现它和SQL数(shù)据库查询语言有很多相(xiàng)似(sì)之处。使用prolog可以很方便(biàn)的处理数据。
5. 强大的递归功能
在其它的(de)语言中,你(nǐ)也(yě)许(xǔ)已经接触(chù)过递归程序了。递归是(shì)一(yī)种非常简洁的方(fāng)式(shì),它(tā)能够有效的解决许多难题。而在prolog中,递(dì)归的功(gōng)能得到了充分的(de)体现,你甚至(zhì)都会感(gǎn)到惊奇,递归居然有如(rú)此巨大的能(néng)力。