小编Eri*_*icP的帖子

可区分联合的结构属性

我刚刚意识到 F# 记录是引用类型以及我进行了多少装箱和拆箱。我有很多这样的小记录:

type InputParam =
    | RegionString of string
    | RegionFloat of float32
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试用“Struct”属性来标记它,我会收到一个编译器错误,指出“FS3204 如果联合类型有多个案例并且是一个结构,那么联合类型中的所有字段都必须被赋予唯一的名称。” 该语言参考显示了创建结构歧视这样的工会:

[<Struct>]
type InputParamStruct =
    | RegionString of RegionString: string
    | RegionFloat of RegionFloat: float32
Run Code Online (Sandbox Code Playgroud)

x of string 和 x of x: string 有什么区别?这些字段一开始就不是唯一的?为什么 F# 不默认为记录结构?

f# struct discriminated-union

7
推荐指数
2
解决办法
493
查看次数

F#惯用表演

我正在使用Exercism来学习F#.Nth Prime的挑战是建立一个Eratosthenes筛子.单元测试让你搜索第1,001个素数,即104,743.

我修改了一个代码片段,我记得从F#For Fun和Profit批量工作(需要10k素数,而不是25)并将它与我自己的命令式版本进行比较.性能差异显着:

BenchmarkDotNet v0.11.2结果 (BenchmarkDotNet v0.11.2)

有没有一种有效的方法来这样做?我喜欢F#.我喜欢使用F#库保存多少时间.但有时我看不到有效的惯用路线.

这是惯用的代码:

// we only need to check numbers ending in 1, 3, 7, 9 for prime
let getCandidates seed = 
    let nextTen seed ten = 
        let x = (seed) + (ten * 10)
        [x + 1; x + 3; x + 7; x + 9]
    let candidates = [for x in 0..9 do yield! nextTen seed x ]
    match candidates with 
    | 1::xs -> xs  //skip 1 …
Run Code Online (Sandbox Code Playgroud)

performance f# idiomatic imperative

6
推荐指数
1
解决办法
175
查看次数