List 有人能给我解释一下管道是怎么安装的吗|&引用;角色在Prolog中工作?

List 有人能给我解释一下管道是怎么安装的吗|&引用;角色在Prolog中工作?,list,prolog,List,Prolog,我有以下代码: [a,b,[]]=[First,Second,Third|Fourth]. 它给了我以下输出: First = a, Second = b, Third = Fourth, Fourth = []. 我想知道第三个是如何分配给第四个的管道字符与Lisp中的“consing dot”非常相似。管道后面的变量将获取相应列表的全部剩余部分 因此,这里我们期望Third绑定到数据中显式给定的空列表。但之后什么都没有,因此第四个也绑定为空 Third绑定到Fourth只是将Thir

我有以下代码:

 [a,b,[]]=[First,Second,Third|Fourth].
它给了我以下输出:

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

我想知道
第三个
是如何分配给
第四个
的管道字符与Lisp中的“consing dot”非常相似。管道后面的变量将获取相应列表的全部剩余部分

因此,这里我们期望
Third
绑定到数据中显式给定的空列表。但之后什么都没有,因此
第四个
也绑定为空

Third
绑定到
Fourth
只是将
Third
绑定为空的一种间接方式。

请参见我的回答:有关如何实现Prolog列表的详细信息

基本上,prolog列表是一种简单的数据结构。空列表由原子
[]
表示。非空列表是结构
/2
。此结构中的左参数是列表的开头;右参数是列表的尾部,它是另一个列表(空列表
[]
或非空列表(
/2


友好的列表表示法是除此之外的语法糖。表达式
[H | T]
与表达式
(H,T)
完全相同。表达式
[a,b | T]
(a,.(b,T))
完全相同。表达式
[a,b,c]
(a,.(b,.(c,[])完全相同

没有,它们只是两个空列表,它们“偶然”相等。我两天前回答了相关问题,也许这会有所帮助:记住输出不是“赋值”,而是“等价”。所以正确的阅读方法是
第三=第四=[]
,或“
第三
第四
,和
[]你得到的答案/输出是不同的:简单的答案替换在一行中,
Third=Fourth,Fourth=[]
也在一行中。无意冒犯,但我发现你随机假设他从Lisp中知道“consing dot”有点幽默。我不知道什么是“consing dot”Lisp中的是哈哈。但是我喜欢你的解释。@zch我同样觉得有点幽默,他随机假设有人知道Prolog是什么。Prolog也有一种考虑点,但从语法上来说它是一个谓词:
(a,b)
。在Lisp中,
(a,b c)
相当于完全点的
(a.(b)。(c.nil))
。考虑点表示下面的东西是一个列表,它构成了这个列表的其余部分。开始时,麦卡锡使用了二进制点表示法。
(a.(b.nil))
可以压缩为
(a b c)
的想法是后来出现的。因此,无论如何,在基于Lisp的模式匹配器中,我们可以使用
(foo-bar.xyzy)
与Prolog的
[foo,bar | xyzy]
相对应。因此,至少在某些方面,条形图就像一个考虑点。