因为我希望函数应用程序在Haskell中具有关联性
'x':'y':"z"
等效于('x':'y'):"z"
。
('x':'y')
是一个错误,因为'y'
并非应有的列表。
但是'x':'y':"z"
的计算结果类似于"xyz"
的{{1}}。因此,隐式括号在这里是正确的关联。我们怎么解释呢?
答案 0 :(得分:8)
答案 1 :(得分:1)
luqui的答案很严格。如果您对清单的定义方式有更深入的了解,您会发现它反之亦然:
Prelude> :info []
data [] a = [] | a : [a]
所以列表是
那是一个列表,没有别的就是列表,所以:
[] -- Is a list -> by condition 1
1 -- Is not a list
1:[] -- Is a list by condition 2 -> an element, a colon, a list (empty)
1:2 -- Is not a list. does not follow any condition -> an element, a colon, an element
1:(2:[]) -- Is a list by condition 2 -> an element, a colon, a list (2:[])
(1:[]):[] -- Is NOT a list -> a list (1:[]), a colon, a list
(1:2):[] -- Is not a list -> (1:2) is not an element
[1,2,3,4] -- Is syntactic sugar for 1:(2:(3:(4:[])))
因此,如果将:
保留为关联性,那么我们将得出(1:2):[]
的情况,根据定义这不是一个列表。
希望有帮助