[英]What in the implementation needs to change in order for a left associative operator to become right associative?
我正在閱讀Haskell,並且正如預期的那樣,有些運算符是左關聯的,而另一些運算符是右關聯的。 那讓我開始思考,當比較左關聯版本和右關聯版本時,新運算符¤的實現會有什么不同?
因此給定[1,2] ¤ [3,4] ¤ [5,6]
,如果我希望將此解釋為(([1,2] ¤ [3,4]) ¤ [5,6])
與([1,2] ¤ ([3,4] ¤ [5,6]))
?
要聲明操作員是左或右關聯的,可以使用固定性聲明 。
例如
infixl 5 .+. -- left associative
infixr 5 .-. -- right associative
infix 5 .=. -- not associative
最后一個導致x .=. y .=. z
x .=. y .=. z
x .=. y .=. z
是一個解析錯誤,需要顯式括號。
上面的數字5
是優先級,應在其他運算符的級別之后進行選擇(例如(+)
為6,而($)
為0)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.