Google が構文の検索をもっと上手にできたらいいのにと思います。
decades :: (RealFrac a) => a -> a -> [a] -> Array Int Int
decades a b = hist (0,9) . map decade
where decade x = floor ((x - a) * s)
s = 10 / (b - a)
Google が構文の検索をもっと上手にできたらいいのにと思います。
decades :: (RealFrac a) => a -> a -> [a] -> Array Int Int
decades a b = hist (0,9) . map decade
where decade x = floor ((x - a) * s)
s = 10 / (b - a)
f(g(x))
は
数学で:f ∘ g
(x)
ハスケルで: ( f . g )
(x)
関数合成という意味です。この質問を参照してください。
は(hx) が関数を返さない限り型チェックしないと解釈されるため、 は とf.g.h x
同等ではないことにも注意してください。(f.g.h) x
f.g.(h x)
ここで $ 演算子が役に立ちます: f.g.h $ x
x をパラメーターh
から式全体のパラメーターに変えます。そして、それは同等にf(g(h x))
なり、パイプは再び機能します。
.
関数合成の高階関数です。
Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4
「ピリオドは関数合成演算子です。一般的に言えば、f と g が関数の場合、(f . g) x は f (gx) と同じ意味です。つまり、ピリオドは関数から結果を取得するために使用されます。右側の関数にパラメーターとして入力し、この計算を表す新しい関数を返します。」
関数合成です:リンク
機能構成(ページがかなり長いので検索を利用)