[英]Why is colon right associative in this expression?
因為函數應用程序在Haskell中是關聯的,所以我期待
'x':'y':"z"
相當於('x':'y'):"z"
。 ('x':'y')
是一個錯誤,因為'y'
不是應該的列表。
但'x':'y':"z"
評估為"xyz"
如'x':('y':"z")
。 所以隱式括號在這里是正確的關聯。 我們怎么解釋這個?
luqui的anwser是最嚴格的。 如果你更深入地思考如何定義列表,你會發現它不可能是其他的:
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):[]
根據定義,它不是列表。
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.