前往顾页
以后地位: 主页 > 收集编程 > Ajax实例教程 >

为甚么学习 Prolog

时候:2017-12-04 21:53来源:知行网www.zhixing123.cn 编辑:麦田守望者

Prolog 是种逻辑式的编程说话. 我第一次见到这个名字的时候年夜约其实我学习 SICP 的过程中, 实现了一个简朴的逻辑式说话的解释器. 以后我又在 CTMCP 一书中的 Relational Programming 和 Logical Programming 中多次见到 Prolog 的身影, 加上我本身对各种编程说话非常地感兴趣, 所以我挑选学习这门说话, 在这里记录一下我的学习的进度和经历, 也希望能为他人学习 Prolog 供应一下眇乎小哉的帮忙吧.

##册本的挑选

在挑选学习一门新的编程说话以后, 第一件事情是上彀查询一些质料因为 Prolog 的利用者极少, 所以质料也非常的难以查找, 我一开端想要利用的是 Prolog by Example, 但是因为很难找到所以就挑选了 Learn Prolog Now.

##开辟环境的搭建

怎样才气疾速的搭建 Prolog 的开辟环境呢, 如果你是用的 Mac. 在号令行中输入

 

brew cask install swi-prolog

如果没有装 brew 或 cask, 可以在 谷歌 上轻松找到这两个号令行东西的装置体例. 在这里我也就不在多说了.

我是用的编辑器是 Emacs, 利用的插件可以点这里. 装置好以后, 我们便可以开端 Prolog 之旅了.

##Prolog 根本

Prolog 有三种非常根基布局:

  • 究竟(facts)
  • 法则(rules)
  • 查询(queries)

究竟和法则被叫做 knowledge base 或叫 database, Prolog 的编程其实就是写 knowledge base, 这些 knowledge base 就定义和保存了我们感兴趣的全数知识. 我们若何利用一个 Prolog 法度呢? 就是建议查询, 就是经由过程向 knowledge base 中存储的数据提出问题, 然后获得答复. 这与我们平常平凡的利用 Objective-C Java 等号令式编程有着极年夜的不合.

###Facts

起首我们先写下几个 Prolog 中的 facts, 需求翻开一个文件, 后缀是 .pl.

 

programmer(linux).
programmer(bill).
designer(jonathan).

这个文件 facts.pl 就是一些 facts 的调集, 重视, 在这里的每个 fact 都是以 . 末端的. 我们怎样利用呢, 在号令行中切换到 facts.pl 的目次下, 然后输入 swipl.

 

Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?-

然后会呈现这些信息, 利用 consult('fact.pl'). 加载你的 Prolog 代码. 输入: programmer(linux).

 

?- programmer(linux).
true

Prolog 会前往 true. 如果你输入: programmer(jonathan).

 

?- programmer(jonathan).
false

它就会前往 false. 很简朴吧.

当然 facts 也能够是向下面如许有多个参数

 

loves(i,u).
loves(he,u).

如果你输入一个不存在过程, 它就会奉告你 Undefined procedure.

###Rules

接上去我们介绍一下甚么是法则 rules, 法则我们了解起来非常的容易, 在 Prolog 中若何实现一些法则呢, 我们利用 :-.

 

sunny(today).
happy(tom).
football(tom) :- sunny(today),happy(tom).

接上去我们加载我们的代码, 扣问 football(tom). Prolog 会前往 true, 法则是甚么呢, 法则的前半部分也就是 football(tom) 是法则的头部(head), 法则的后半部分 sunny(today),happy(tom) 是法则的目标(goals). 当法则的 goals 建立时, head 就会建立也就是:

如果明天的气候很好, tom 也很高兴, 那么他就会去踢足球.

Prolog 利用 , 来表示 , 利用 ; 来表示 . 所以在这里, 前面的两个前提都需求建立. 如许 Prolog 就可以推出 football(tom).

我们可以在 Rules 中增加变量加强我们的表达才气, 比如如许:

 

father(tom,john).
father(john,ive).
grandfather(X,Z):-father(X,Y),father(Y,Z).

我信赖这对我们是非常容易了解的, 在这里也不过量说了然.

###Queries

甚么是 queries, 其实我们在上边输入的 football(tom)., programmer(jonathan). 都是一种查询. 只是查询是不是建立, 接上去我们就需求在查询中引入变量(variable)了.

 

programmer(linux).
programmer(bill).
designer(jonathan).

还是这一段代码, 我们可以经由过程扣问 Prolog:

 

?- programmer(X).

然后就会呈现

 

X = linux

Prolog 每次只会呈现最早适合前提的成果, 若果你想看其他的成果, 可以输入 ; 也就是或, 来检察是不是有其他的输入, 我们输入 ; 以后, 会呈现:

 

X = bill

再次输入以后, 就会前往 false 了, 因为没有适合前提的成果了.

##Prolog 语法

介绍了 Prolog 中的根基元素以后, 我们想要晓得, Prolog 中的根基元素究竟是由甚么来构建的呢, 现在来看一下 Prolog 中的根基语法.

Prolog 中的根基元素都是 term(不晓得该怎样翻译)构建而来的. 而在 Prolog 中有 4 种不合的 term

  • atom
  • number
  • variable
  • complex term

###Atom

适合以下前提之一的就是 Prolog 中的 atom:

  1. 由年夜写字母, 小写字符, 数字和下划线构成的并且以小写字母开首的字符串, 比方: john tom big_big a_bc.
  2. 肆意的包装在单引号 ' 中的字符床. 比方: 'dsada' *((&@!MBAS)) Fjdh_da.
  3. 特别的字符串, 比如 :- ; @=.

###Numbers

数字在 Prolog 中其实不是非常的首要, 不过 Prolog 支撑年夜多数的数字的表示和特别的值.

###Variables

变量是由由年夜写字母, 小写字符, 数字和下划线构成的并且以年夜写字母或下划线开首的字符串, 比如 X Variable _dsal.

变量 _ 在 Prolog 中非常的特别被称为匿名变量.

###Complex Terms

Complex terms 实际上就是一种布局, 而我们之前见到的

 

programmer(linux).
programmer(bill).
designer(jonathan).

这些都是 complex terms, 并且我们也能够定义出更加复杂的布局

 

father(father(fahter(john))).

complex term 具有的参数的数量叫做 arity, arity 在 complex term 中及其的首要, progammer(linux) 中的 arity = 1, love(i,u) 中的 arity = 2.

在 Prolog 中可以定义两个名字不异, 而 arity 不合的 predicate.

当我们会商到 predicate 时, 我们常常利用 / 前面跟着 arity 的数量来表示 predicate.

比方:

 

happy/1
love/2

##总结

到目前为止, 我们已对 Prolog 有着一个年夜体的体味, 也能感受到它与其他编程说话的与众不合, 而这类不合就是差遣我学习它的最年夜身分.

顶一下
(1)
100%
踩一下
(0)
0%
------分开线----------------------------
标签(Tag):Prolog
------分开线----------------------------
颁发评论
请自发遵循互联网相关的政策法规,严禁公布色情、暴力、革命的谈吐。
评价:
神色:
考证码:点击我更换图片
猜你感兴趣