我有这个代码:
[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
被束缚为空的一种间接方式。