【发布时间】:2010-11-03 00:04:50
【问题描述】:
考虑用这个 F# 代码来对下面的 i 3 和 5 的倍数求和:
let isMultipleOfThreeOrFive n =
(n % 3 = 0) || (n % 5 = 0)
let sequenceOfMultiples i =
seq {1 .. i - 1} |> Seq.filter isMultipleOfThreeOrFive
由于i 是int,如果i 很大,则会溢出。这个带有BigInteger 的版本可以解决这个问题:
let isMultipleOfThreeOrFive n =
(n % 3I = 0I) || (n % 5I = 0I)
let sequenceOfMultiples (i : System.Numerics.BigInteger) =
seq {1I .. i - 1I} |> Seq.filter isMultipleOfThreeOrFive
要将int 版本转换为BigInteger 版本,我必须在数字后添加大量Is。这是因为 F# 不进行隐式转换。
有没有简单的方法来解决这个问题,或者在 6 个地方添加Is 是最好的做法?
【问题讨论】:
-
这不是一个错误,而是一个特性 ;-)
标签: f#