F#函数参数数据类型
F# function parameter datatype
这是我尝试编写的 F# 的第一行,很抱歉,因为我可能只是不知道要搜索的正确 Google 关键字。
我试过像这样定义一个函数:
let sigmoid x deriv = if deriv then x * (1 - x) else 1 / (1 + System.Math.Exp(-x))
这让我在 System.Math.Exp(-x)
:
上出错
The type 'float' does not match the type 'int'
我想我希望编译器对此函数进行类型推断并将 x
定义为浮点数。我在这里错过了什么?
这是我要插入的全部内容:
let sigmoid x deriv = if deriv then x * (1 - x) else 1 / (1 + System.Math.Exp(-x))
[<EntryPoint>]
let main argv =
sigmoid 1.0 false |> printfn "%A"
0
编译器将 x
推断为 int
,因为您在 1 - x
之类的地方使用了它。一个简单的 1
将 总是 是一个整数,你只能在算术表达式中与其他整数一起使用它。如果您将 1
的所有用法更改为 1.0
,您的代码将编译,这将使它成为 float
并导致 x
被推断为 float
作为嗯。
这与 C# 不同,例如,C# 会在必要时强制转换类型,从而允许在同一表达式中混合使用整数和浮点数。但是,在某些情况下,这可能会导致意外的精度损失,而 F# 总是强制您显式声明任何必要的转换。
这是我尝试编写的 F# 的第一行,很抱歉,因为我可能只是不知道要搜索的正确 Google 关键字。
我试过像这样定义一个函数:
let sigmoid x deriv = if deriv then x * (1 - x) else 1 / (1 + System.Math.Exp(-x))
这让我在 System.Math.Exp(-x)
:
The type 'float' does not match the type 'int'
我想我希望编译器对此函数进行类型推断并将 x
定义为浮点数。我在这里错过了什么?
这是我要插入的全部内容:
let sigmoid x deriv = if deriv then x * (1 - x) else 1 / (1 + System.Math.Exp(-x))
[<EntryPoint>]
let main argv =
sigmoid 1.0 false |> printfn "%A"
0
编译器将 x
推断为 int
,因为您在 1 - x
之类的地方使用了它。一个简单的 1
将 总是 是一个整数,你只能在算术表达式中与其他整数一起使用它。如果您将 1
的所有用法更改为 1.0
,您的代码将编译,这将使它成为 float
并导致 x
被推断为 float
作为嗯。
这与 C# 不同,例如,C# 会在必要时强制转换类型,从而允许在同一表达式中混合使用整数和浮点数。但是,在某些情况下,这可能会导致意外的精度损失,而 F# 总是强制您显式声明任何必要的转换。