当您使用x:xs语法拆分列表时,为什么它包含在括号中?圆括号的意义是什么?为什么不是[x:xs]或只是x:xs?
Nor*_*sey 45
cons单元格不必在每个上下文中都有括号,但在大多数情况下都是因为
用火信将它烧成大脑.
例:
length [] = 0
length (x:xs) = 1 + length xs
Run Code Online (Sandbox Code Playgroud)
如果省略括号,编译器会认为你有一个参数x
后跟一个错误放置的中缀运算符,它会痛苦地抱怨.另一方面,这没关系
length l = case l of [] -> 0
x:xs -> 1 + length xs
Run Code Online (Sandbox Code Playgroud)
在这种情况下,既不x
也xs
不可能被解释为功能应用程序的一部分,因此不需要括号.
请注意,相同的精彩规则函数应用程序比任何中缀运算符都更紧密,这使我们可以length xs
在1 + length xs
没有任何括号的情况下写入.中缀规则赋予和中缀规则取消.