1

Haskellの式の評価を理解するのに助けが必要です。たとえば、次のようにします。

group . sort $ [1,2,3]  

これは、式がどのように評価されるかについての私の考えです、私は完全に間違っていますか?
1.。が最初に評価され、これにより関数Ord a => [a]-> [[a]]が作成されます
。2。$が評価され、$
3の右側が評価されます。$の右側がパラメータとして関数に供給されます。 $の左側にあります

スペース(最高の優先順位?)はどのようにこれに結びつくのですか?

4

1 に答える 1

8

式ツリー($)の上部には、子として、(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)あります。脱糖剤。_ これは、解析された式ツリーです。(.)groupsort[1,2,3](1:(2:(3:([]))))

を強制的に関数を取得し、評価されていないものをこの関数(group . sort)に渡すことによって評価されます。[1,2,3]

(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]

于 2012-08-22T20:02:53.683 に答える