Prolog的数据结构

在这之前我们只涉及了Prolog法式中简单的数据形式 , 这种数据只有一项 , 是以长短布局的 , 然而有需要将对象或整汇集到一路 。 在这篇经验中 , 我将介绍它的布局和表的特征 。
2Prolog的根基概念和语律例则
2SWI-Prolog的递归

Prolog的数据结构

文章插图

需要这些哦
SWI-Prolog
电脑
布局1Prolog供给了一种在谓词中成立布局的方式 , 即许可谓词的变元具有变元 , 从而达到使谓词变元具有布局的目标 。 用这种方式可以使谓词中具有的信息反映实际糊口中数据的现实关系 。 例如 , 考虑下面简单事实:
吉恩的头发是红色的 。
显然 , 这个事其实Prolog中可以暗示为:
has(jean, red_hair).
还有其他一系列关于人以及他们的头发、眼睛颜色和其它表征他们属性的事实 , 常识库可能如图所示 。

Prolog的数据结构

文章插图

2此刻若是筹算扣问常识库中每小我的头发颜色 , 我们不得不如许提问:
?- has(X,Y).
并不竭在提醒符“?”后键入“;” , 迫使回溯 。 会话过程如图所示 。
正如读者所看到的 , 如许将导致年夜量不需要的信息输出 。 这是因为数据长短布局化的 , 因而无法较为明白地扣问 。

Prolog的数据结构

文章插图

3一种很是有效的 , 可切当地表达上述事实信息的方式如下:
has(jean, hair(red)).

Prolog的数据结构

文章插图

4此刻为了领会常识库里每小我头发的颜色 , 我们可以简单地提出扣问:
?- has(X, hair(Y)).
然后再要求Prolog在每个回覆之后进行回溯 , 会话过程如图所示 。
这些信息不多不少恰是我们想要的 。

Prolog的数据结构

文章插图

表的根基概念1表是根基的数据布局 , 很多适用的Prolog法式都是成立在表的根本之上的 , 表是很多元素的简单调集 。 好比:
[red, yellow, green]
[1, 5, 68]
没有元素的表叫作空表 , 暗示为:
[ ]
下图是一行列表的代码 。

Prolog的数据结构

文章插图

2表头和表从头至尾的概念是理解Prolog中表处置的根本 。 表头是一个元素 , 而表从头至尾自己是一个表 。 表具有递归的数据布局 , 因为它是由表头和另一个表(表从头至尾)构成的 。 正像其递归布局那样 , 表也可以递归界说 。 好比:
考虑到[a, b, c] , 该表表头=a , 表从头至尾=[b, c];表从头至尾也是一个表 , 表头 = b , 表从头至尾=[c];而表从头至尾[c] , 也是一个表 , 表头=c , 表从头至尾=[ ] 。
因为[ ]是个空表 , 所以递归过程到此为止 。 空表可视为遏制前提 。
若用H暗示表头 , T暗示表从头至尾 , 则表记作:
[H|T]
此中竖线“|”是Prolog顶用于分隔表头和表从头至尾的符号 。

推荐阅读