我需要幫助理解Haskell表達式評估。舉例來說:瞭解Haskell表達式評估
group . sort $ [1,2,3]
這是我對如何評估表達式的想法,我完全錯了嗎?
1。首先被評估,這產生了函數Ord a => [a] - > [[a]]
2. $被評估,這將評估$
的右側3. $的右側被作爲參數到$
左側的功能如何將空格(最高優先級?)與此綁定在一起?
我需要幫助理解Haskell表達式評估。舉例來說:瞭解Haskell表達式評估
group . sort $ [1,2,3]
這是我對如何評估表達式的想法,我完全錯了嗎?
1。首先被評估,這產生了函數Ord a => [a] - > [[a]]
2. $被評估,這將評估$
的右側3. $的右側被作爲參數到$
左側的功能如何將空格(最高優先級?)與此綁定在一起?
表達式樹頂部有($)
,(group . sort)
和[1,2,3]
作爲孩子。我可以看到這一點,因爲(.)
具有9的更高的優先級#和優先級爲0更緊密地比($)
結合:
Prelude> :i (.)
(.) :: (b -> c) -> (a -> b) -> a -> c -- Defined in `GHC.Base'
infixr 9 .
Prelude> :i ($)
($) :: (a -> b) -> a -> b -- Defined in `GHC.Base'
infixr 0 $
的(group . sort)
具有(.)
作爲頂部和group
和sort
作爲參數。 [1,2,3]
脫糖至(1:(2:(3:([]))))
。這是解析的表達式樹。
通過強制(group . sort)
得到一個函數,然後將未評估爲通過此函數進行評估。
(group . sort)
是\xs -> group (sort xs)
所以這成爲group (sort [1,2,3])
。 group
查看(sort [1,2,3])
的最外部構造函數,其強制(sort [1,2,3])
產生(1 : thunk)
,其中thunk
最終將被評估爲[2,3]
。
這裏沒有空格,無論如何都不是優先級。 –
@Karolis,我認爲海報意味着功能應用程序。 –
評估順序與'2 + 3 * 4'完全相同。 – sdcvvc