我正在学习 Haskell,但我没有找到答案。
为什么像示例中那样使用重音来传递mod
函数来映射?我看到了其他不需要它的其他功能的案例。
map (`mod` 3) [1..6] -- result is [1,2,0,1,2,0]
如果我没有重音通过,结果就完全不同了。
map (mod 3) [1..6] -- result is [0,1,0,3,3,3]
我正在学习 Haskell,但我没有找到答案。
为什么像示例中那样使用重音来传递mod
函数来映射?我看到了其他不需要它的其他功能的案例。
map (`mod` 3) [1..6] -- result is [1,2,0,1,2,0]
如果我没有重音通过,结果就完全不同了。
map (mod 3) [1..6] -- result is [0,1,0,3,3,3]
重音“使函数表现得像运算符”。例如:
mod a b == a `mod` b
所以
(mod 3) == mod 3 ?
和
(`mod` 3) == mod ? 3
如果你想明确地确定你在想什么,(我总是这样做,因为我还处于学习阶段),你总是可以使用匿名函数(我认为有时称为lambda 表达式,但不确定)
> map (\x -> x `mod` 3) [1..10]
[1,2,0,1,2,0,1,2,0,1]
> map (\x -> 3 `mod` x) [1..10]
[0,1,0,3,3,3,3,3,3,3]
> map (\x -> mod x 3) [1..10]
[1,2,0,1,2,0,1,2,0,1]
> map (\x -> mod 3 x) [1..10]
[0,1,0,3,3,3,3,3,3,3]