小编Tal*_*age的帖子

F#性能对Checked Calcs的影响?

使用Checked模块会对性能产生影响吗?我已经用int类型的序列测试了它,看不出明显的区别.有时检查版本更快,有时未选中更快,但通常不会太多.

Seq.initInfinite (fun x-> x) |> Seq.item 1000000000;;
Run Code Online (Sandbox Code Playgroud)
Real: 00:00:05.272, CPU: 00:00:05.272, GC gen0: 0, gen1: 0, gen2: 0
val it : int = 1000000000
Run Code Online (Sandbox Code Playgroud)
open Checked

Seq.initInfinite (fun x-> x) |> Seq.item 1000000000;;
Run Code Online (Sandbox Code Playgroud)
Real: 00:00:04.785, CPU: 00:00:04.773, GC gen0: 0, gen1: 0, gen2: 0
val it : int = 1000000000
Run Code Online (Sandbox Code Playgroud)

基本上我正在试图弄清楚是否总会打开Checked会有任何不利因素.(我遇到了一个并不是很明显的溢出,所以我现在扮演的是那个不想要另一个伤心的被抛弃的情人的角色.)我能想出的唯一非人为的理由并不总是使用Checked如果有一些性能受到打击,但我还没有见过.

performance f# integer-overflow

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

运算符使用seq <'T>重载

在我正在试验的项目中,我不断地增加序列元素.我想创建一个这样的运算符:

let (.*) (a:seq<'T>) (b:seq<'T>) = Seq.map2 (*) a b
Run Code Online (Sandbox Code Playgroud)

但是,在FSI中它返回:

val ( .* ) : a:seq<int> -> b:seq<int> -> seq<int>
Run Code Online (Sandbox Code Playgroud)

以下失败:

  seq [1.0;2.0] .* seq [3.0;4.0];;
  -----^^^

stdin(16,6): error FS0001: This expression was expected to have type
    int    
but here has type
    float 
Run Code Online (Sandbox Code Playgroud)

如何让操作符在通用seq <'T>上工作(提供'T支持乘法)?

f# operator-overloading

3
推荐指数
1
解决办法
47
查看次数

多种类型的F#功能类型注释

我正在尝试定义一个"准通用"函数.我不希望它完全是通用的,我希望它只适用于"整数"类型(即byte,sbyte,int16,uint16,int,uint32,int64,uint64,bigint).

如何将它放入函数定义的类型注释中?为了澄清,我将如何重写以下代码以实际工作(仅使用3种类型,可能不会失去泛化):

let square (x: int|int64|bigint) =
    x * x
Run Code Online (Sandbox Code Playgroud)

generics f# functional-programming

3
推荐指数
1
解决办法
771
查看次数