4

私は現在、Haskell (Learn Yourself a Haskell を読んでいます) を使い始めており、次のような行に出くわしました:

map (++"!") ["a", "b"] -- ["a!", "b!"]
map ("!"++) ["a", "b"] -- ["!a", "!b"]

なぜこれが可能なのですか、またはどのように機能しますか? 除算など、他の非可換演算で同じことを行うことはできません。

map (3/) [1..3]   -- [3.0,1.5,1.0]
map ((/)3) [1..3] -- [3.0,1.5,1.0]
map (3(/)) [1..3] -- error

ここで何かが欠けているように感じますが、の実装でmapはヒントが得られません。

4

3 に答える 3

10

このコードは無効です:

map (3(/)) [1..3]

(/)は前置関数ですが、中置として使用します。コンパイラは、関数3(引数のない関数) を実行しようとするとそれを参照し、引数として追加(/)します。

/中置関数です。したがって、次のことができます。

map ( / 3) [1..3]   -- [0.3333333333333333,0.6666666666666666,1.0]
map (3 / ) [1..3]   -- [3.0,1.5,1.0]
于 2013-09-20T11:09:24.067 に答える