探索Prolog

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

从纯理论的角度来讲,Prolog是一种令人陶醉的编程语言,但是在这本书中还是着重介绍他的实际使用方法。

进入Prolog世界

和其他的语言一样,最好的学习方法是实践。这本书将使用Prolog的解释器来向大家介绍几个具体的应用程序的编写过程。

首先你应该拥有一个Prolog的解释器,你可以在 免费prolog版本中找到它。关于解释器的使用,请参阅相关的使用说明文档,建议使用amzi prolog 或者swi prolog来运行本网站的程序。

逻辑编程

什么叫逻辑编程?也许你还没有一个整体的印象,还是让我们首先来研究一个简单的例子吧。运用经典的逻辑理论,我们可以说“所有的人(person)都属于人类(moral)”,如果用Prolog的语言来说就是“对于所有的X,只要X是一个人,它就属于人类。”

moral(X):-person(X).

同样,我们还可以加入一些简单的事实,比如:苏格拉底(socrates)是一个人。

person(socrates).

有了这两条逻辑声明,Prolog就可以判断苏格拉底是不是属于人类。在Prolog的Listener中键入如下的命令:

?-mortal(socrates). (此句中的'?-'是Listener的提示符,本句表示询问苏格拉底是不是属于人类。)

Linstener将给出答案:

yes

我们还可以询问,“谁属于人类?”

?-mortal(X).

我们会得到如下的答案:

X= socrates

这个简单的例子显示了Prolog的一些强大的功能。它能让程序代码更简洁、更容易编写。在多数情况下Prolog的程序员不需要关心程序的运行流程,这些都由Prolog自动地完成了。

当然,一个完整的程序不能只包括逻辑运算部分,还必须拥有输入输出,乃至用户界面部分。很遗憾,Prolog在这些方面做得不好,或者说很差。不过它还是提供了一些基本的方法的。下面是上述的程序一个完整的例子。

% This is the syntax for comments. % MORTAL - The first illustrative Prolog
program mortal(X) :- person(X).
person(socrates).
person(plato).
person(aristotle).
mortal_report:-
write('Known mortals are:'),nl, mortal(X), write(X),nl,
fail.

把这个程序调入Listener中,运行mortal_report.。

?- mortal_report.
Known mortals are:
socrates
plato
aristotle
no

以上程序中的一些函数以后还会详细的介绍的。最后的那个no表示没有其他的人了。

Prolog教程 2相关推荐

  1. Atitit.5gl 第五代语言编程语言 PROLOG教程  人工智能语言的标准 与实现

    Atitit.5gl 第五代语言编程语言 PROLOG教程  人工智能语言的标准 与实现 1. 第五代语言就是自然语言又被称为知识库语言或人工智能语言,1 2. 人工智能语言特点2 2.1. 试探法2 ...

  2. Prolog教程 16

      Prolog特别适合开发自然语言的应用系统.在这一章,我们将为寻找Nani游戏添加自然语言理解的部分.(由于Prolog谓词是使用的英文符号,所以这里的自然语言理解只能局限在英文中) 在着手于编制 ...

  3. Prolog教程 1

    (转)Prolog教程 1 今天是2019年1月1日, 因为AI课要用到Prolog, 看到不错的入门教程收录下来学习. 如果你是一位prolog的新手,希望你首先阅读这篇文章,好对prolog的全局 ...

  4. Prolog教程 3

    facts, predicate, pred(arg1,arg2,-argN). argument type: interger, atom( low case begin, ' '), variab ...

  5. Prolog教程 14--cut的功能

    cut,使用符号!来表示. 直到目前为止,我们都一直在使用Prolog内建的回溯功能.使用此功能可以方便地写出结构紧凑的谓词来. 但是,并不是所有的回溯都是必须的,这时我们需要能够人工地控制回溯过程. ...

  6. Prolog教程 5

      我们可以把简单的查询连接起来,组成一些较复杂的查询.例如,如果我们想知道厨房里能吃的东西,就可以向Prolog进行如下的询问. ?- location(X, kitchen), edible(X) ...

  7. Prolog教程 4

      现在我们的游戏中已经有了一些事实,使用Prolog的解释器调入此程序后,我们就可以对这些事实进行查询了.本章和下一章中的Prolog程序只包括事实,我们要学会如何对这些事实进行查询. Prolog ...

  8. Prolog教程 7

      到现在为止,我们已经对Prolog有了一个基本的了解,现在有必要对我们所学过的知识做一个系统的总结. Prolog的程序是由一系列的事实和规则组成的数据库. 规则之间的调用是通过联合操作完成的,P ...

  9. Prolog教程 9

    Prolog的程序就是谓词的数据库,我们通常把这些谓词的子句写入Prolog的程序中的.在运行Prolog时,解释器首先把所有的子句调入到内存中.所以这些写在程序中的子句都是固定不变的.那么有没有办法 ...

  10. Prolog教程 10

    到目前为止,所介绍的事实.查询以及规则都使用的是最简单的数据结构.谓词的参数都是原子或者整数,这些都是Prolog的基本组成元素.例如我们所使用过的原子有: office, apple flashli ...

最新文章

  1. 开源图神经网络框架DGL升级:GCMC训练时间从1天缩到1小时,RGCN实现速度提升291倍...
  2. Python 进阶_OOP 面向对象编程_类属性和方法
  3. Java多线程-Callable和Future
  4. 论文笔记:Weighted Graph Cuts without Eigenvectors:A Multilevel Approach
  5. python3性能还低吗_谁说Python性能差的?-- 让python比awk快 (3)
  6. qtgl 鼠标平移 c++_罗技真爱粉的MX Master 3无线鼠标体验
  7. LDAP命令介绍---dsreplication--initialize
  8. wampserver启动报错:1 of 2 services running - 解决篇
  9. Netty技术细节源码分析-内存池之PoolChunk设计与实现
  10. 在sqlServer中把数据导出为insert脚本
  11. 12种求职方式成功率排行榜
  12. apt-get install php5-redis,Ubuntu14-04安装redis和php5-redis扩展
  13. Xamarin只言片语3——Xamarin.Android下支付宝(Alipay SDK)使用
  14. 厂商占用mac地址段多少排名
  15. 【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件...
  16. mysql not in 或 in 优化
  17. javascript中replace()
  18. html鼠标悬停多个效果,33个jQuery与CSS3实现的绚丽鼠标悬停效果
  19. SpringBoot【基础篇】
  20. 大学期间-Fans同学的11个艰难的决定

热门文章

  1. Excel VBA代码密码破解
  2. FFMPEG之编码实现RTMP循环推流(附带av_interleaved_write_frame返回-22处理)04
  3. 7.4 字典及其内置方法
  4. 魔幻一般的WPF URI资源引用
  5. 高通骁龙MSM7540芯片技术资料简介
  6. XH与PH排线的区别
  7. 单个人工神经元模型示意图,人体神经元模型制作
  8. Unity打开淘宝app并跳转到商品页面
  9. vcd文件中存储多维数组 vcs_怎样在Modelsim软件中产生一个.vcd文件并且显示波形?...
  10. Java、JSP手机销售网