我有这段代码:
[a,b,[]]=[First,Second,Third|Fourth].
它给了我以下输出:
First = a, Second = b, Third = Fourth, Fourth = [].
我想知道第三个被分配到第四个。
答案 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,[])))
完全相同。