在这之前我们只涉及了Prolog法式中简单的数据形式 , 这种数据只有一项 , 是以长短布局的 , 然而有需要将对象或整汇集到一路 。 在这篇经验中 , 我将介绍它的布局和表的特征 。
2Prolog的根基概念和语律例则
2SWI-Prolog的递归
文章插图
需要这些哦
SWI-Prolog
电脑
布局1Prolog供给了一种在谓词中成立布局的方式 , 即许可谓词的变元具有变元 , 从而达到使谓词变元具有布局的目标 。 用这种方式可以使谓词中具有的信息反映实际糊口中数据的现实关系 。 例如 , 考虑下面简单事实:
吉恩的头发是红色的 。
显然 , 这个事其实Prolog中可以暗示为:
has(jean, red_hair).
还有其他一系列关于人以及他们的头发、眼睛颜色和其它表征他们属性的事实 , 常识库可能如图所示 。
文章插图
2此刻若是筹算扣问常识库中每小我的头发颜色 , 我们不得不如许提问:
?- has(X,Y).
并不竭在提醒符“?”后键入“;” , 迫使回溯 。 会话过程如图所示 。
正如读者所看到的 , 如许将导致年夜量不需要的信息输出 。 这是因为数据长短布局化的 , 因而无法较为明白地扣问 。
文章插图
3一种很是有效的 , 可切当地表达上述事实信息的方式如下:
has(jean, hair(red)).
文章插图
4此刻为了领会常识库里每小我头发的颜色 , 我们可以简单地提出扣问:
?- has(X, hair(Y)).
然后再要求Prolog在每个回覆之后进行回溯 , 会话过程如图所示 。
这些信息不多不少恰是我们想要的 。
文章插图
表的根基概念1表是根基的数据布局 , 很多适用的Prolog法式都是成立在表的根本之上的 , 表是很多元素的简单调集 。 好比:
[red, yellow, green]
[1, 5, 68]
没有元素的表叫作空表 , 暗示为:
[ ]
下图是一行列表的代码 。
文章插图
2表头和表从头至尾的概念是理解Prolog中表处置的根本 。 表头是一个元素 , 而表从头至尾自己是一个表 。 表具有递归的数据布局 , 因为它是由表头和另一个表(表从头至尾)构成的 。 正像其递归布局那样 , 表也可以递归界说 。 好比:
考虑到[a, b, c] , 该表表头=a , 表从头至尾=[b, c];表从头至尾也是一个表 , 表头 = b , 表从头至尾=[c];而表从头至尾[c] , 也是一个表 , 表头=c , 表从头至尾=[ ] 。
因为[ ]是个空表 , 所以递归过程到此为止 。 空表可视为遏制前提 。
若用H暗示表头 , T暗示表从头至尾 , 则表记作:
[H|T]
此中竖线“|”是Prolog顶用于分隔表头和表从头至尾的符号 。
推荐阅读
- Word如何为每一页添加不同的页眉
- 星期一到星期日的英文 星期一到星期日的英文是什么
- 移动网上营业厅的电子发票如何下载
- 英语世界动物日手抄报 世界动物日的手抄报怎么画
- printf语句控制输出数值的宽度和小数点后位数
- 叶落归根的意思 叶落归根的出处
- WIN10自带计算器如何计算a的多少次方等于b
- autocad P3D如何设置修改一条直线的终点坐标
- 不惜歌者苦但伤知音惜的意思 不惜歌者苦但伤知音稀什么意思
- 人故有一死或重于泰山或轻于鸿毛的固是什么意思 人故有一死或重于泰山或轻于鸿毛的意思