Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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# 使函数可用于所有数字类型(int、float、long)_F# - Fatal编程技术网

F# 使函数可用于所有数字类型(int、float、long)

F# 使函数可用于所有数字类型(int、float、long),f#,F#,此简单功能: let sum a b = a + b 仅对int类型有效 如何使其也适用于浮动和长时间?使用: 更新: 如果您对编写自己的多态数值函数感兴趣,那么应该同时使用和模块 以下是线程中的多态余弦函数: 由于类型推断,您给出的示例函数仅适用于int类型;类型推断机制将自动推断int,因为它看到了加法。如果您想为float和long创建相同的函数,您可以按照Pad所说的内联操作,也可以这样做: let sumFloat (a:float) b = a + b let sumLong

此简单功能:

let sum a b = a + b
仅对int类型有效

如何使其也适用于浮动和长时间?

使用:


更新:

如果您对编写自己的多态数值函数感兴趣,那么应该同时使用和模块

以下是线程中的多态余弦函数:


由于类型推断,您给出的示例函数仅适用于int类型;类型推断机制将自动推断int,因为它看到了加法。如果您想为float和long创建相同的函数,您可以按照Pad所说的内联操作,也可以这样做:

let sumFloat (a:float) b = a + b

let sumLong (a:int64) b = a + b

但是内联是获得您正在寻找的通用“支持加法的任何类型”行为的正确机制。

我认为内联有不同的目的可能有不同的目的,但它实现了您所寻找的@pad是对的——这就是你想做的。@ChuckNorris:你想写一般的数值函数吗?用F#表示会非常冗长。你需要找到一个更好的例子,因为
(+)
已经是泛型的了。@pad是的,我想泛型就是我要找的,基本上,没有内联,你还能怎么做?@ChuckNorris:你想得不对。抛开你对内联意味着什么的先入为主的概念,读一读它对F#意味着什么。如果你对更多细节感兴趣,我写了一篇F#math系列文章,其中有一篇关于用F#编写通用数字代码的文章(包括
内联
,还有一些更高级的选项):在尝试编写任何通用数字代码之前,请确保您了解为什么此函数仅适用于一种类型。
let inline cosine n (x: ^a) = 
    let one: ^a = LanguagePrimitives.GenericOne
    Seq.initInfinite(fun i -> LanguagePrimitives.DivideByInt (- x*x) ((2*i+1)*(2*i+2)))
    |> Seq.scan (*) one
    |> Seq.take n
    |> Seq.sum
let sumFloat (a:float) b = a + b

let sumLong (a:int64) b = a + b