簡體   English   中英

為什么冒號在這個表達式中是正確的?

[英]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") 所以隱式括號在這里是正確的關聯。 我們怎么解釋這個?

GHC.Types聲明 (由Prelude

infixr 5 :

這被稱為固定聲明

luqui的anwser是最嚴格的。 如果你更深入地思考如何定義列表,你會發現它不可能是其他的:

Prelude> :info []
data [] a = [] | a : [a]

列表也是如此

  1. “空列表”
  2. “一個元素,一個冒號(缺點)和一個列表”

這是一個列表,沒有別的是列表,所以:

 []   -- 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM