有人可以向我解释一下管道“|”人物在prolog中工作?

时间:2013-10-22 00:51:27

标签: list prolog

我有这段代码:

 [a,b,[]]=[First,Second,Third|Fourth].

它给了我以下输出:

 First = a, Second = b, Third = Fourth, Fourth = [].

我想知道第三个被分配到第四个。

2 个答案:

答案 0 :(得分:1)

管道字符与Lisp中的“consing dot”非常相似。管道之后的变量占用相应列表的整个剩余部分。

因此,我们希望Third绑定到数据中明确给定的空列表。但是之后没有任何东西,所以Fourth也是空的。

绑定到Third

Fourth只是Third被绑定为空的间接方式。

答案 1 :(得分:1)

请参阅我的答案:https://stackoverflow.com/a/7559044/467473,了解有关如何实施Prolog列表的详细信息。

基本上,prolog列表是一个简单的数据结构。空列表由原子[]表示。非空列表是结构./2。此结构中的左参数是列表的 head ;右边的argumetn是列表的 tail ,它是另一个列表(空列表[]或非空列表(./2)。

友好列表符号只是语法糖而已。表达式[H|T]完全与表达式.(H,T)相同。表达式[a,b|T].(a,.(b,T))完全相同。表达式[a,b,c].(a,.(b,.(c,[])))完全相同。