Io和Ruby(前两章的语言,后续会补上)被称为命令式语言。命令式语言就是我们需要准确的告诉计算机怎么完成一件任务,每一个细节都需要我们设计好。但是Prolog不同,它是一门声明式语言,我们只需要给他一些事实(fact)和推论(inference),并让他为我们推断。我们不需要告诉电脑怎么做,电脑会自动做出推断。
1 关于Prolog
Prolog是一门逻辑编程语言,它于1972年由Alain Colmerauer和Phillipe Roussel开发完成,在自然语言处理领域颇受欢迎。和SQL一样,Prolog基于数据库,但是其数据有逻辑规则和关系构成;Prolog由两部分组成:一部分用于描述数据,另一部分用于查询数据。下面是基本构建单元。
- 事实。事实是关于真实世界的基本断言。
- 规则。规则是关于真实世界中一些事实的推论。
- 查询。查询是关于真实世界的一个问题。
下面我们来具体看一看Prolog的语法规则,揭开它的神秘面纱。
2 基本概况
Prolog中,第一个字母的大小写有重要含义,如果一个词以小写字母开头,他就是一个原子(atom)—— 一个类似ruby符号的
固定值,如果一个词以大写字母或下划线开头,那么他就是一个
变量。变量的值可以改变,但是原子不能。下面看个具体的例子,可以帮助我们理解这两个概念。
likes(wallace,cheese).
likes(grommit,cheese).
likes(wendolene,sheep).
friend(X,Y):-\+(X=Y),likes(X,Z),likes(Y,Z).
这几行代码可以这样理解:前三行语句是事实,最后一行语句是一个规则。wallace,grommit,wendolene都是原子。我们可以这么说,wallace喜欢cheese,grommit喜欢cheese,wendolene喜欢sheep。现在我们可以问一些问题了,Prolog会用yes或no来回答。比如:
|?-likes(wallace,sheep).
no
|?-likes(grommit,cheese).
yes