当前位置:  开发笔记 > 编程语言 > 正文

F#函数参数数据类型

如何解决《F#函数参数数据类型》经验,为你挑选了1个好方法。

这是我尝试编写的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为float.我在这里错过了什么?

以下是我要插入的全部内容:

let sigmoid x deriv = if deriv then x * (1 - x) else 1 / (1 + System.Math.Exp(-x))

[]
let main argv = 
    sigmoid 1.0 false |> printfn "%A"
    0

TeaDrivenDev.. 6

编译器推断xint,因为你在类似的东西中使用它1 - x.简单1始终是一个整数,并且您只能在算术表达式中与其他整数一起使用它.如果你改变你的所有使用你的代码编译11.0,这将使它成为一个float并导致x被推断为一个float为好.

这与C#不同,例如,如果需要,它将强制类型,因此允许在相同的表达式中混合整数和浮点数.但是,在某些情况下,这可能导致意外的精度损失,而F#总是强迫您明确说明任何必要的转换.



1> TeaDrivenDev..:

编译器推断xint,因为你在类似的东西中使用它1 - x.简单1始终是一个整数,并且您只能在算术表达式中与其他整数一起使用它.如果你改变你的所有使用你的代码编译11.0,这将使它成为一个float并导致x被推断为一个float为好.

这与C#不同,例如,如果需要,它将强制类型,因此允许在相同的表达式中混合整数和浮点数.但是,在某些情况下,这可能导致意外的精度损失,而F#总是强迫您明确说明任何必要的转换.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有