相关疑难解决方法(0)

是否有在F#中进行隐式转换的技巧?

考虑这个F#代码,将下面的数字相加i为3和5的倍数:

let isMultipleOfThreeOrFive n = 
    (n % 3 = 0) || (n % 5 = 0)

let sequenceOfMultiples i =
    seq {1 .. i - 1} |> Seq.filter isMultipleOfThreeOrFive
Run Code Online (Sandbox Code Playgroud)

因为iint,如果i很大,你会溢出.这个版本BigInteger负责:

let isMultipleOfThreeOrFive n = 
    (n % 3I = 0I) || (n % 5I = 0I)

let sequenceOfMultiples (i : System.Numerics.BigInteger) =
    seq {1I .. i - 1I} |> Seq.filter isMultipleOfThreeOrFive
Run Code Online (Sandbox Code Playgroud)

要将int版本转换为版本BigInteger,我必须I在数字后添加许多s.这是因为F#不进行隐式转换.

有没有一种简单的方法来解决这个问题,或者I在6个地方添加s是最好的办法?

f#

5
推荐指数
2
解决办法
989
查看次数

完整,高效的NumericLiteral模块实现

基于这个问题的讨论,任何人都可以提供代码或代码链接,显示NumericLiteralX模块的完整实现(例如这个)吗?我特别感兴趣的是有效实现FromInt32/ 64用于NumericLiteralX促进通用数字运算的模块.这是从上述问题中得出的可能效率低下的实现:

module NumericLiteralG = 
    let inline FromZero() = LanguagePrimitives.GenericZero
    let inline FromOne() = LanguagePrimitives.GenericOne
    let inline FromInt32 (n:int) =
        let one : ^a = FromOne()
        let zero : ^a = FromZero()
        let n_incr = if n > 0 then 1 else -1
        let g_incr = if n > 0 then one else (zero - one)
        let rec loop i g = 
            if i = n then g
            else …
Run Code Online (Sandbox Code Playgroud)

generics f# literals

5
推荐指数
1
解决办法
612
查看次数

标签 统计

f# ×2

generics ×1

literals ×1