首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog中的列表[[a,b]\c]

Prolog中的列表[[a,b]\c]
EN

Stack Overflow用户
提问于 2017-07-28 15:28:05
回答 1查看 450关注 0票数 3

在我探索记录列表的不同方法的过程中,我对佩雷拉和希伯的“Prolog和自然语言分析”(Prolog and )一书(数字版第42页)中的“Prolog和自然语言分析”(Prolog and )一书中的列表数字版感兴趣。

起初,我认为这样的表示法在语法上是不正确的,因为它必须说是[[a,b]|[c]],但是在使用write_canonical/1之后,Prolog返回了'.'('.'(a,'.'(b,[])),c)

据我所见,这对应于以下树结构(虽然在我看来,这种结构只是以c结尾,而没有末尾的空列表):

不过,我似乎找不到使用逗号和括号的对应符号。我认为它应该与[[a,b],c]相对应(但这显然会返回与write_canonical/1不同的结果)。

是否没有对应的[[a,b]|c]表示法,还是我看错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 15:40:16

不过,我似乎找不到使用逗号和括号的对应符号。

没有相应的表示法,因为从技术上讲,这不是一个真正的列表。

Prolog有用于列表的语法糖。Prolog中的列表就像Lisp列表一样,实际上是一个链接列表:每个元素要么是空列表[],要么是节点.(H,T)H是头,T是尾。在Prolog中,列表不是“特殊”的,因为整数处理它们的方式与任何其他术语不同。当然,很多Prolog库都会处理列表,并使用上面定义的约定。

为了使复杂的列表更方便,语法糖被发明了。您也可以编写类似于.(H,T)的节点[H|T]。这意味着在你的[[a,b]|c]中。我们有一个外部列表,它有一个节点.(H,c),而?是另一个列表,有两个节点和一个空列表H = .(a,.(b,[]))

从技术上讲,我不认为这是一个“真正的”列表,因为列表的尾部应该有另一个节点./2,或者一个空列表。

但是,您可以将它与诸如:[[a,b]|C]这样的变量一起使用,以便进一步统一尾部C。在这里,我们有一些以[a,b]作为第一个元素的列表(所以是包含一个列表的列表)和一个开放的尾部C。例如,如果我们稍后将C转到C = [],那么这个列表就是[[a,b]]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45377264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档