我在 Haskell 中有以下一段代码:
addm a b m = fromInteger $ mod (fromIntegral a + fromIntegral b) (fromIntegral m)
这个想法是,如果
a
、 b
和 m
的类型没有足够的位使得加法可以包装(例如,如果使用 Word8
),那么计算将是不正确的。因此,为了防止这种情况发生,我们暂时转换为 Integer
,进行计算然后再转换回来。在没有三个
fromIntegral
和一个 fromInteger
的情况下,有没有更简洁的方法来编写这个? 最佳答案
扩展 augustuss's comment :
addm a b m = i $ mod (i a + i b) (i m)
where i = fromIntegral
(
fromInteger
和 fromIntegral
对 Integer
的作用相同,所以我们可以用 fromInteger
替换 fromIntegral
)。关于Haskell:从/到整数转换的冗长性可以更简洁吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27624758/