为什么(++)可以用于使用map进行前置和附加?

Kol*_*lja 4 haskell functor

我目前正在开始使用Haskell(阅读Learn Yourself a Haskell),并且遇到类似于以下内容的行:

map (++"!") ["a", "b"] -- ["a!", "b!"]
map ("!"++) ["a", "b"] -- ["!a", "!b"]
Run Code Online (Sandbox Code Playgroud)

为什么这可能,或者它是如何工作的?我无法对其他非交换操作(例如分部)做同样的事情:

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
Run Code Online (Sandbox Code Playgroud)

我觉得我在这里遗漏了一些东西,但实施map并没有给我任何提示.

vio*_*ior 10

此代码无效:

map (3(/)) [1..3]
Run Code Online (Sandbox Code Playgroud)

(/)是前缀函数,但你用它作为中缀.编译器在您尝试运行时看到它3(没有参数的函数),添加(/)为参数.

/是中缀功能.所以,你可以做下一个:

map ( / 3) [1..3]   -- [0.3333333333333333,0.6666666666666666,1.0]
map (3 / ) [1..3]   -- [3.0,1.5,1.0]
Run Code Online (Sandbox Code Playgroud)

  • 是的,你是对的.是的,这是一种叫做[sections]的语法魔法(http://www.haskell.org/haskellwiki/Section_of_an_infix_operator). (4认同)