2

我有这个代码:

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

它给了我以下输出:

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

我想知道怎么Third分配到的Fourth

4

2 回答 2

2

请在此处查看我的答案: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,[])))

于 2013-10-22T17:18:22.057 回答
1

管道字符与 Lisp 中的“consing dot”非常相似。管道后面的变量取对应列表的全部剩余部分。

因此,在这里我们希望Third绑定到数据中明确给出的空列表。但是在那之后什么都没有,因此Fourth也绑定为空。

Third被束缚Fourth只是Third被束缚为空的一种间接方式。

于 2013-10-22T01:00:28.317 回答