10

今日Haskellで遊んでいたときに、次のようなことができることに気づきました。

($ 4) (> 3)

を生成しTrueます。ここで何が起こっているのですか?直感があれば素晴らしいと思います。

私の推測?は不完全な関数適用のように見え($ 4)ますが、私が混乱している$のは、それが中置演算子であるため、次のようにすべきではありません(4 $)か?これはコンパイルされないので、明らかにそうではありません。そのため、何が起こっているのか本当に理解していないと私は信じています。この(>3)用語は私には理にかなっています。なぜなら、のようなものを提供(\x -> x 4) (>3)すると、同じ結果になるからです。

4

3 に答える 3

19

($ 4)セクションと呼ばれるものです。これは、中置演算子を部分的に適用する方法ですが、左側ではなく右側を提供します。とまったく同じ(flip ($) 4)です。

同様に、(> 3)はセクションです。

($ 4) (> 3)

次のように書き直すことができます

(flip ($) 4) (> 3)

これはと同じです

flip ($) 4 (> 3)

これはと同じです

(> 3) $ 4

そしてこの時点で、これがに要約されることは明らかであるはず(4 > 3)です。

于 2012-05-07T05:06:11.180 に答える
12

どちらの側からでも部分的に中置演算子を適用できます。のような可換演算子の場合、またはを言うか+どうかは関係ありませんが、たとえば除算の場合は、被除数または除数のいずれかを指定できます。(+ 1)(1 +)(5 /)(/ 5)

関数適用演算子は、関数を左側のオペランドとして、パラメーターを右側のオペランド( )として受け取るため、関数またはパラメーターf $ xのいずれかを使用して部分的に適用できます。そのように与えられた(f $)($ x)

($ 4) (> 3)

最初に、パラメーター4を使用して$演算子を部分的に適用し、関数を指定します(> 3)。つまり、これが本質的になるのは

(> 3) $ 4

これはと同じ(4 > 3)です。

于 2012-05-07T05:12:09.390 に答える
6

($ 4)関数を受け取り、4それに適用する関数です。

(> 3)数値を受け取り、それが3より大きいかどうかをチェックする関数です。

したがって、後者の関数を前者に与えることにより、基本的4に、入力が、より大きいかどうかをチェックする関数に適用すること3になり、したがって、が得られますTrue

于 2012-05-08T00:33:20.053 に答える