我目前正在开始使用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)