9

OK、長い一日だったので、私の脳は Haskell レベルで機能していないかもしれませんが、「Learn You a Haskell」の 1 つの例を理解できません。

このセクションは$ を使用した Function Application と$呼ばれ、定義方法の例があります。

($) :: (a -> b) -> a -> b
f $ x = f x

これまでのところ、すべてが明らかです。最後の例を除いて、このセクションのすべての例を理解しています。

ghci> map ($ 3) [(4+), (10*), (^2), sqrt]
[7.0,30.0,9.0,1.7320508075688772]

ここでは($ 3)、関数のリスト全体にマップし、それらの関数を に適用した結果を取得し3ます。しかし、これはどのように可能ですか?

最初のコード スニペットから、最初の引数が関数であることは明らかです。次のように書くこともできます。

*Main> ($) sqrt 4
2.0

($ 3)これは function の部分的な適用ですが、 function の位置$に進みます3! それで3、関数か何かになるはずですか?

別の謎があります: 一体何(4+)ですか? (+4)関数 の部分適用であることはわかってい+ますが、関数 の(4+)部分適用でよいの4でしょうか? ナンセンス。ここではどのようなトリックが機能しますか?

4

3 に答える 3

14

($ 3)部分的なアプリケーションで(+ 4)はなく、オペレーター セクションです。(($) 3)部分適用はまたはのようになります((+) 4)

形式の演算子セクション(? x)( where?は任意の中置演算子を表します) は、演算子の右側のオペランドをバインドします。つまり、 と同等\y -> y ? xです。同様に、演算子セクション(x ?)は左側のオペランドをバインドするため、部分適用と同等です。

于 2014-09-08T14:59:12.327 に答える