小编use*_*226的帖子

如何在F#中测试序列是否为空?

考虑这个计算数字因子的F#代码:

let n = 340339004337I

// A sequence of all factors:
let factors = seq { 1I .. n / 2I} |> Seq.filter (fun x -> n % x = 0I) 

// Pull off the first factor from the sequence:
let factor = 
    if factors = seq [] then
        n
    else
        factors |> Seq.nth 0
Run Code Online (Sandbox Code Playgroud)

换句话说,如果factors是空的,那么返回n.否则,从中拉出第一个元素factors.我们的目标是占1和之间的所有因素(N/2) ,和Ñ本身自1和Ñ总是因素Ñ.

factors = seq []测试是行不通的.我通过看这个来达到这个语法:

> seq {1 .. …
Run Code Online (Sandbox Code Playgroud)

f#

10
推荐指数
1
解决办法
4641
查看次数

是否有在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
查看次数

标签 统计

f# ×2