什么是prolog
prolog是Programming in LOGic的简写,也就是使用逻辑的语言编写程序。
prolog不是很高深的语言,相反,比较起其他的一些程序语言,例如c、basic等等语言, prolog是更加容易理解的语言。如果你从来没有接触过计算机编程,那么恭喜你,你将很容易的进入prolog世界。如果你已经是其他语言的高手,你就需要完全丢弃你原来的编程思路,否则是很难掌握prolog的。
逻辑思维在我们日常生活中比比皆是,prolog正是把这种思维用文字描述出来的计算机语言。严格来说,我不认为这是程序,因为它执行哪一步不是由人来确定的,好像是有了初级的“智能”。
例如使用prolog实现数独、八皇后问题、汉诺塔问题时,可以发现不一样的数学美。
一个例子
你定义一些规则,然后提出一个问题,它就会按这些规则来找答案。
比如有如下规则:
love(X,Y). % X love Y
%X和Y是lovers的条件是:X love Y并且Y love X
lovers(X,Y):-love(X,Y),love(Y,X).
然后提出以下事实:
love(zhangxueyou,wangfei).
love(zhangxueyou,zouhuimin).
love(wangfei,xietinfen).
love(zouhuimin,zhangxueyou).
love(xietinfen,wangfei).
love(xietinfen,zouhuimin).
love(liudehua,zouhuimin).
并且提出lovers的规则:
lovers(X,Y):-love(X,Y),love(Y,X).
接着提出问题
?-love(zhangxueyou,wanfei).
程序就会按照规则去找,并输出结果
true.
如果我们想知道Who和wangfei是lovers,我们输入
?-lovelovers(Who, wanfei).
得到结果
Who = xietingfeng.
Prolog是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。
SWI prolog使用
1.下载及安装
SWI prolog官网是http://www.swi-prolog.org/download/stable
根据自己情况选择一个下载,我使用的windows (64 bit)的安装包。
然后直接安装,安装过程中会提示将.pl文件与编译器关联(一般选择与swipl�in目录下的swipl-win.exe进行关联)。
2. 开始第一个程序
新建一个文本文件,命名为first.pl(名字可随意更改,只需保证后缀为.pl即可), 然后对其进行编辑。
在里面写如下代码后保存。
双击使用SWI-Prolog.exe打开:
在光标后输入问题:love(zhangxueyou,wanfei). 按回车键后就会出现结果。
prolog特点:
1. prolog程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程序的人。
从这个意义上来说,prolog程序不是真正意义上的程序。所谓程序就是按照一定的步骤运行的计算机指令,而prolog程序的运行步骤不由人来决定。它更像一种描述型的语言,用特定的方法描述一个问题,然后由电脑自动找到这个问题的答案。举个极端的例子,你只需要把某个数学题目告诉它,它就会自动的找到答案,而不像使用其他的语言一样,必须人工的编制出某种算法。
2. prolog程序中没有if、when、case、for这样的控制流程语句
前面已经说了,程序的运行方式有电脑自己决定,当然就用不到这些控制流程的语句了。通常情况下,程序员不需要了解程序的运行过程,只需要注重程序的描述是否全面,不过prolog也提供了一些控制流程的方法,这些方法和其他语言中的方法有很大的区别,希望你在以后的学习当中能够融会贯通。
3. prolog程序和数据高度统一
在prolog程序中,是很难分清楚哪些是程序,哪些是数据的。事实上,prolog中的所有东西都有相同的形式,也就是说数据就是程序,程序就是数据。举一个其他语言的例子:如果想用c语言编写一个计算某个数学表达式的程序很简单(比如:a=2+54),因为这是一段程序。但是如果想编写一个计算用户输入的表达式的值的程序就很困难了。因为用户输入的是一段数据(字符串),如果想让c语言处理这个字符串,就需要很多方面的技术。则正是因为在c语言中,程序和数据是分开的。而在prolog就不存在这个问题,你甚至可以很轻松的编写处理其它prolog程序的程序。
4. prolog程序实际上是一个智能数据库
prolog的原理就是关系数据库,它是建立在关系数据库的基础上的。在以后的学习中你会发现它和SQL数据库查询语言有很多相似之处。使用prolog可以很方便的处理数据。
5. 强大的递归功能
在其它的语言中,你也许已经接触过递归程序了。递归是一种非常简洁的方式,它能够有效的解决许多难题。而在prolog中,递归的功能得到了充分的体现,你甚至都会感到惊奇,递归居然又如此巨大的能力。
接下来,小编会边学习边给出prolog的相关教程,想学人工智能和AI的同学不要错过了。
网友评论