我有这个代码:
[a,b,[]]=[First,Second,Third|Fourth].
它给了我以下输出:
First = a, Second = b, Third = Fourth, Fourth = [].
我想知道怎么Third分配到的Fourth。
请在此处查看我的答案:https ://stackoverflow.com/a/7559044/467473 ,了解有关如何实现 Prolog 列表的详细信息。
基本上,序言列表是一种简单的数据结构。空列表由 atom 表示[]。非空列表是结构./2。此结构中的左参数是列表的头部;正确的参数是列表的尾部,它是另一个列表(空列表[]或非空列表 ( ./2)。
友好的列表符号只是在此之上的语法糖。表达式[H|T]与表达式完全相同.(H,T)。表达式[a,b|T]与 完全相同.(a,.(b,T))。和表达式[a,b,c]完全一样.(a,.(b,.(c,[])))。
管道字符与 Lisp 中的“consing dot”非常相似。管道后面的变量取对应列表的全部剩余部分。
因此,在这里我们希望Third绑定到数据中明确给出的空列表。但是在那之后什么都没有,因此Fourth也绑定为空。
Third被束缚Fourth只是Third被束缚为空的一种间接方式。