質問

私はHaskellでは単純平均機能を開発してみてください。 これが動作しているようです。

lst = [1, 3]

x = fromIntegral (sum lst)
y = fromIntegral(length lst)

z = x / y

しかし、次のバージョンの仕事をしない理由?

lst = [1, 3]

x = fromIntegral.sum lst
y = fromIntegral.length lst

z = x / y
役に立ちましたか?

解決

あなたは混乱している事業者のためのHaskellの優先順位規則によってアップトリップなっています。

あなたが書くとき

x = fromIntegral.sum lst

Haskellは同じように、そのを見て

x = fromIntegral.(sum lst)

は、書き込みに何を意味するのかだっます:

x = (fromIntegral.sum) lst

他のヒント

.(組成物)は、機能アプリケーションより低い優先順位を有するので、

fromIntegral.sum lst

と解釈され
fromIntegral . (sum lst)

sum lstは関数ではないので、間違っている。

私はちょうど追加したい "の$救助にの!" ます:

x = fromIntegral $ sum lst
y = fromIntegral $ length lst

これは、最も低い優先度を持っており、それがあまりにも多くの括弧のレベルを避けるためにあります。異なり、(。)、それは関数合成をしない、それは右に引数を評価し、左側の関数に渡すことに注意してください。タイプはそれをすべて言うます:

($) :: (a -> b) -> a -> b
(.) :: (b -> c) -> (a -> b) -> a -> c
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top