Plog(1)

来源:互联网 发布:菜鸟也能数据分析 编辑:程序博客网 时间:2024/04/30 14:53

 prolog是Programming in logic的缩写,意思是使用逻辑进行编程的语言,在人工智能领域被广泛使用。
 在学习prolog前我们需要一个解释器,我选择的是swi-prolog,可以从http://www.swi-prolog.org/下载。这个解释器功能比较强大,它提供了java和C/C++的interface. 还有一个是StrawBerryProlog,http://www.dobrev.com/light.html,相比SWI界面做得不错,但下载XP版本的注册比较烦琐,而且似乎没有INTERFACE,如果只是练习调试prolog也是个不错的选择.在这里我们还是以SWI为主.
几个prolog的基本概念:
terms:  这个其实代表的就是数据,但这个数据是相对宽泛的,它包括变量,常量,还有复合terms.
facts: 代表事实,比如a是b的家长,这就是一个事实,可以如此表示: parent(a,b); 这里a和b就是terms. fact的基本形式是p(t1,....,tn).
现在我们不再牵涉其它概念,尝试用上面两个概念来做一点东西.
进入SWI,我们可以使用命令菜单中的consult来加载外部的.pl文件(swi prolog的格式),或者用NEW命令新建一个文件.  在这个文件编辑窗口中我们输入以下语句:
man(jack).
man(tom).
woman(mary).
woman(helen).
这里的"."代表我们常用程序语言中的";",注意! 这是区分facts和terms的重要标志,有时我们会看到这样的语句man(foo(gg)).  其中的foo(gg)其实就是terms,而man(foo(gg)). 才是facts.退出编辑窗口,我们在命令行中输入man(jack). 回车,即可看到YES,表示数据库中确实存在男人jack这个事实.  呵呵,我们已经迈出第一步了,你可以输入自己的名字,不过你得到的结果只能是NO,快尝试把自己的名字加进去试试吧,可别搞错性别!.
接下来我们要稍稍提高一点了.我们修改了上面的文件:
man(jack).
man(tom).
woman(mary).
woman(helen).
parent(jack,mary).       %jack是mary的父母
parent(helen,mary).    %helen是mary的父母
在命令行中我们这样写: parent(C,mary).   这个C是参数,表示我们也不知道mary的父母是谁,我们想得到这个答案. 注意,在prolog中参数的首字母是默认大写的.
回车后我们看到这样的结果:
C=jack;    我们只要再按一下";"(redo 命令)就接着会出现 C=helen;    你有了什么想法了呢,能不能利用这个模拟一个DB呢?
下一篇我们将再提高一点并学习prolog中的rules,有了它就可以写出非常复杂的逻辑程序了.(本人也是刚接触prolog,如有不对之处望赐教)




y