F# 定义函数输入类型/防止类型不匹配

F# Define Function input type/ Prevent type missmatches

我可能应该先说我是 F# 的新手,这无疑是一个菜鸟问题。

我已经使用 F# 大约两个月了,我通常对 F# 感到沮丧的一件事是不断出现的错误。 "Here was expected to have type something but was given type something else."

我记得我的老师说过,与其他语言不同,F# 无法自行判断您指的是什么类型。

所以我的问题是你们如何定义函数输入的类型?

示例:

let FoneTwo y x =
  System.Math.Sqrt(x^2+y^2)

printfn "%A" (FoneTwo 2.2 3.3)

此错误提示应为浮点数但类型为字符串。这个字符串到底是从哪里来的?在函数调用中,我清楚地使用了浮点数。所以我想我需要以某种方式指定 y 和 x 是一个浮点数,但是如何指定呢?

总的来说,我不仅是在回答了这个例子之后,还有跟踪这个问题的一般规则或方法?因为通常这种情况经常发生。

谁能赐教一下?

请注意运算符 ^ 不是幂,它是字符串连接(为了 ML 兼容性)。

您应该改用 pown 函数:

System.Math.Sqrt(pown x 2 + pown y 2)

您可以将其缩短为:

sqrt(pown x 2 + pown y 2)

有一个运算符 ** 可用,但它适用于浮点数,因此您必须将代码更改为:

sqrt (x ** 2.0 + y ** 2.0)

但我会用 pown 代替。