ポイントフリー スタイルで書く、つまり、明示的な引数なしで関数を定義すると、暗黙の引数が複数ある場合に見苦しくなります。
演算子を正しく組み合わせれば、いつでも実行できます。しかし、結果はがっかりすることになり、ポイントフリー スタイルの主な利点であるシンプルさと読みやすさが失われます。
楽しみと学習のために、試してみます。明示的な (別名「ポイントフル」) スタイルから始めて、そこから作業を進めましょう。
(注意: 合成演算子を(>>) (a) (b)
通常のa >> b
.
let h x y = f x y |> g
let h x = f x >> g
// everybody puts on their parentheses!
let h x = (>>) (f x) (g)
// swap order
let h x = (<<) (g) (f x)
// let's put another pair of parentheses around the partially applied function
let h x = ((<<) g) (f x)
そこにいます!ほら、今は私たちが望む形h x
で表現されています-「に渡し、次に結果を別の関数に渡します」。x
f
その関数はたまたま であり((<<) g)
、これはfloat -> float
を引数として取り、その合成を で返す関数ですg
。
(使用されている特定の例では違いはありませんが、2 番目に重要な構成ですg
。)
もちろん、私たちのfloat -> float
議論は(f x)
の部分的な適用ですf
。
したがって、次のようにコンパイルされます。
let h x = x |> f |> ((<<) g)
これは、次のように非常に明確に単純化できます。
let h = f >> ((<<) g)
それが何を意味するかをすでに知っている場合、これはそれほどひどいものではありません。しかし、センスのある人なら誰でも、むしろ読み書き するでしょうlet h x y = f x y |> g
。