- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JE干性脱模剂MSDS
实验4加法难题列表
为了能够更好地表达一组数据,Prolog引入了列表这种数据结构。 列表是一组项目的集合,此项目可以是Prolog的任何数据类型,包括结构和列表。列表的元素由方括号括起来,项目中间使用逗号分割。例如下面的列表列出了厨房中的物品。
[apple, broccoli, refrigerator]
我们可以使用列表来代替以前的多个子句。例如:
loc_list([apple, broccoli, crackers], kitchen).loc_list([desk, computer], office).
loc_list([flashlight, envelope], desk).
loc_list([stamp, key], envelope).
loc_list([washing machine], cellar).
loc_list([nani], washing machine).
可见使用列表能够简化程序。当某个列表中没有项目时我们称之为空表,使用“[]”表示。也可以使用nil来表示。下面的句子表示hall中没有东西。
loc_list([], hall)
变量也可以与列表联合,就像它与其他的数据结构联合一样。假如数据库中有了上面的子句,就可以进行如下的询问。
loc_list(X,kitchen)
X= [apple,broccoli,crackers]
1 Solution[_,X,_]=[apple,broccoli,crackers]
X= broccoli
1 Solution
最后这个例子可以取出列表中任何一个项目的值,但是这种方法是不切实际的。你必须知道列表的长度,但是在很多情况下,列表的长度是变化的。
为了更加有效的使用列表,必须找到存取、添加和删除列表项目的方法。并且,我们应该不用对列表项目数和它们的顺序操心。
Prolog提供的两个特性可以方便的完成以上任务。首先,Prolog提供了把表头项目以及除去表头项目后剩下的列表分离的方法。其次,Prolog强大的递归功能可以方便地访问除去表头项目后的列表。
使用这两个性质,我们可以编出一些列表的实用谓词。例如member/2,它能够找到列表中的元素;append/3可以把两个列表连接起来。这些谓词都是首先对列表头进行处理,然后使用递归处理剩下的列表。
首先,请看一般的列表形式。
[X | Y]
使用此列表可以与任意的列表匹配,匹配成功后,X绑定为列表的第一个项目的值,我们称之为表头(head)。而Y则绑定为剩下的列表,我们称之为表尾(tail)。
下面我们看几个例子。
[a|[b,c,d]]=[a,b,c,d]
True
1 Solution上面的联合之所以成功,是因为等号两边的列表是等价的。注意表尾tail一定是列表,而表头则是一个项目,可以是表,也可以是其他的任何数据结构。下面的匹配失败,在“|”之后只能是一个列表,而不能是多个项目。
[a|b,c,d]=[a,b,c,d]
Syntax error in parser
Syntax error下面是其它的一些列表的例子。
[H|T]=[cake,tomato,cabbage,apple]
H= cake, T= [tomato,cabbage,apple]
1 Solution [H|T] = [a, b, c, d, e].
H = aT = [b, c, d, e]
1 Solution
[H|T] = [apples, bananas].
H = apples
T = [bananas]
1 Solution
[H|T]=[a,[b,c,d]] 这个例子中的第一层列表有两个项目。H= a, T= [[b,c,d]]
1 Solution
[H|T]=[apple]
H= apple, T= []
1 Solution
空表不能与[H|T]匹配,因为它没有表头。
[H|T]=[]
No solutions注意:最后这个匹配失败非常重要,在递归过程中经常使用它作为边界检测。即只要表不为空,那么它就能与[X|Y]匹配,当表为空时,就不能匹配,表示已经到达的边界条件。[h|t]=[a]
No solutions
[H|t]=[a]
No solutions
我们还可以在第二个项目后面使用“|”,事实上,|前面的都是项目,后面的是一个表。
[One,Two|Three]=[apple,organge,pear,cake,tomato]
ONE= apple, TWO= organge, THREE= [pear,cake,tomato]
1 Solution首先我们来编写谓词member/2,它能够判断某个项目是否在列表中。
首先我们考虑边界条件,即最简单的情况。
文档评论(0)