多语言展示
当前在线:1989今日阅读:138今日分享:33

Prolog的基本概念和语法规则

Prolog是逻辑编程语言,它的语法是极其简单而又独特的。在Prolog中,数据以逻辑规则的形式存在。在这篇经验中,我将介绍它的基本概念和语法规则。2配置SWI-Prolog编程环境
工具/原料

SWI-Prolog

方法/步骤
1

在Prolog中,最简单的形式就是一些事实。现在,让我们来看下面这个事实:狗(dog)咬(bites)人(man)在Prolog中,这个事实的表述成以下形式:bites(dog,man).关系名在前,对象名在后,并用括号括上。在Prolog术语中,关系被称为谓词,对象被称为变元,整个事实叫作子句。无论是谓词还是变元,一般要用小写,且子句以英文句号“.”结束。

2

对象名如果非要用大写字母、空格等特殊字符,就必须要加单引号。在SWI-Prolog中,甚至支持汉字作为对象名(当然必须得加引号)。

3

需要注意的是,变元数可以是任意的,这取决于所期望联系在一直的对象数目,例如,要在Prolog中表达“约翰送给波林一块手表”这一事实,会是下方的语句:give(john, pauline, watch).

4

在编写程序时,可以用/* */来表示注释,在其中的内容会在运行时被忽略;也可以用%来作为注释符,在那一行中,其后的内容也会被忽略。将事实录入后,再运行后,会有问号提示符“?-”,我们可以进行询问。在Prolog中,变量名的首字母必须大写。下图是一个关于学生信息的程序文件。

5

比如,要提出男生有谁的问题,可以这样询问:-? male(X).如果想看其他答案,可以键入字符“;”,这样Prolog就可以继续进行搜索。如果想到此为止,就按回车键。

6

如果要询问一些更复杂的问题,比如:“在一年级中,有没有20多岁,且学习化学的男生?”语句如下:?- year(X, 1), age(X, Y), Y > 20, studies(X, chemistry).表示“与”的逻辑意义时,要用逗号连接子句。

7

如果提出这样的问题:“Hazel在学数学或是化学吗?”语句如下:?- studies(hazel, mathematics); studies(hazel, chemistry).表示“或”的逻辑意义时,要用分号连接子句。但不建议在Prolog程序中滥用分号,因为会使程序的逻辑性不清楚,以至于难以跟踪。

8

如果要提问:“不学历史的男生有谁?”语句如下:?- male(X), \+(studies(X, history)).在SWI-Prolog中,表示否定用\+,但在其他Prolog方言中,也有用not的。使用时需要用括号将相应条件括起来。但需要注意在这种否定子句中含有变量的情况下,需要将它放在后面。如果将否定条件放到前面,此时,X属于自由变量,也就是说,会先否定掉所有学历史的学生,达不到预期效果。

9

有时,我们对变量的值并不关心,我们可以使用空变量。空变量记作“_”。比如,要提问:“有学哲学的男生吗?”可以这样提问:?- male(_), studies(_, philosophy).

注意事项
1

编程时注意大小写和符号问题。

2

多加练习,熟悉基本语法规则。

推荐信息