6

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

2 回答 2

11

重音“使函数表现得像运算符”。例如:

mod a b == a `mod` b

所以

(mod 3) == mod 3 ?

(`mod` 3) == mod ? 3
于 2013-01-28T18:09:05.310 回答
1

如果你想明确地确定你在想什么,(我总是这样做,因为我还处于学习阶段),你总是可以使用匿名函数(我认为有时称为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]
于 2013-01-30T14:15:24.273 回答