Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于矩阵运算检查的F#合成度量单位_F#_Units Of Measurement - Fatal编程技术网

用于矩阵运算检查的F#合成度量单位

用于矩阵运算检查的F#合成度量单位,f#,units-of-measurement,F#,Units Of Measurement,度量单位的一个重要用例是矩阵运算: 矩阵a*b与c*d的内积仅在b=c时有效,以此类推 但是,我没有看到任何“复合单元”的构造,比如需要的构造 我们有没有办法让F#?中的类型系统检查此项?免责声明:从手机发送=>可能包含错误 我想说,这种检查可以通过使用计量单位或以下方式实现: []类型s 类型M() 静态成员(*)(a:M,b:M):M=failwith“NYI” 设x=M() 设y=M() 设z=x*y//M 然而,问题是:使用……有多方便?免责声明:从手机发送=>可能包含错误 我想说,这

度量单位的一个重要用例是矩阵运算: 矩阵a*b与c*d的内积仅在b=c时有效,以此类推

但是,我没有看到任何“复合单元”的构造,比如需要的构造


我们有没有办法让F#?

中的类型系统检查此项?免责声明:从手机发送=>可能包含错误

我想说,这种检查可以通过使用计量单位或以下方式实现:

[]类型s
类型M()
静态成员(*)(a:M,b:M):M=failwith“NYI”
设x=M()
设y=M()
设z=x*y//M

然而,问题是:使用……有多方便?

免责声明:从手机发送=>可能包含错误

我想说,这种检查可以通过使用计量单位或以下方式实现:

[]类型s
类型M()
静态成员(*)(a:M,b:M):M=failwith“NYI”
设x=M()
设y=M()
设z=x*y//M

然而问题是:使用……会有多方便?

有趣。如果函数中没有其他东西的话,我真的会使用它,就像我想象的那样,它可能是一个负担。对于矩阵演算,我认为它就像F#中的类型系统:如果你得到了正确的维数,并且一般的流程不是荒谬的,那么你的程序99%的时间都是正确的。如果没有一种方法用符号n而不是静态符号3来参数化,那么它的用途是有限的。从我的观点来看,允许这样的功能对于科学计算来说是一个巨大的胜利。@Desco我认为UoM的问题是,在运行时您不知道这些值,那么如何实现函数init():M?由于无法读取维度,因此用户还应在值R和C:init(R,C):Minteresting中指定。如果函数中没有其他东西的话,我真的会使用它,就像我想象的那样,它可能是一个负担。对于矩阵演算,我认为它就像F#中的类型系统:如果你得到了正确的维数,并且一般的流程不是荒谬的,那么你的程序99%的时间都是正确的。如果没有一种方法用符号n而不是静态符号3来参数化,那么它的用途是有限的。从我的观点来看,允许这样的功能对于科学计算来说是一个巨大的胜利。@Desco我认为UoM的问题是,在运行时您不知道这些值,那么如何实现函数init():M?由于无法读取维度,因此用户还应在值R和C:init(R,C):M中指定
[<Measure>] type s
type M<[<Measure>]'w, [<Measure>] 'h>() = 
    static member (*) (a : M<'a, 't>, b : M<'t, 'b>) : M<'a, 'b> = failwith "NYI"
let x = M<s ^ 3, s ^ 3>()
let y = M<s ^ 3, s>()
let z  = x * y // M<s ^ 3, s>