为什么在将mod函数传递给map时使用严重重音?

时间:2013-01-28 18:05:00

标签: haskell

我正在学习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]

2 个答案:

答案 0 :(得分:11)

重音“使功能表现得像操作员”。例如:

mod a b == a `mod` b

所以

(mod 3) == mod 3 ?

(`mod` 3) == mod ? 3

答案 1 :(得分:1)

如果你想明确确定你在想什么,(我总是这样做,因为我还处于学习阶段),你总是可以使用anonymous function (我认为有时称为 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]