Haskell中的模块化算法

时间:2011-05-20 12:59:33

标签: haskell math modular

如何制作一个函数,以便x具有从x=0x=19的一系列值,如果x值超过19或低于零我怎样才能让它环绕

自: x=20, x=21, x=22x=(-1), x=(-2), x=(-3)

要: x=0, x=1, x=2x=19, x=18, x=17 分别

我听说过模块化算术,这显然是我应该处理它的方式。

3 个答案:

答案 0 :(得分:6)

通常你会使用内置函数modrem,但我认为它们不能用于家庭作业。所以你可以编写自己的函数,例如

mod20 x | x < 0 = ...
        | x > 19 = ...
        | otherwise = x

您可以尝试填写...的不同内容。最简单的一个是重复加法或减法,但我不想破坏所有的乐趣。

拥有此功能后,您可以在每次“正常”算术运算后“重新调整”值,例如: mod20 (12 + 17)

答案 1 :(得分:2)

尝试使用mod函数:

(-5) `mod` 20 ==> 15
5 `mod` 20 ==> 5
20 `mod` 20 ==> 0
25 `mod` 20 ==> 5

另见wikipedia主题。

答案 2 :(得分:1)

使用

x `mod` 20

(这是一个填充物,可以回答30个字符。)