我遇到语法错误。 我想发一个返回浮点数的函数。
我想到这会给我正确答案
let cyclesPerInterrupt bps bpw cpu factor =
floor (fudge (float(factor) cyclesPerWord cpu wordsPerSec bps bpw))
但事实并非如此。我已经尝试了所有我能想到的东西,但这并不是为了我。我知道这是愚蠢的,但我想不出来。
作为参考,fudge采用float和整数,cyclesPerWord采用2个整数,wordsPerSec采用2个整数。 Floor采用泛型并返回浮点数。
答案 0 :(得分:3)
另请注意,您可以使用parens按照您最初尝试的方式嵌套函数调用,例如
...(cyclesPerWord cpu (wordsPerSec bps bpw))
(如果没有上面的内部组合,有点像你试图将4个参数传递给cyclesPerWord,这不是你想要的。)
答案 1 :(得分:3)
或者,为了避免让失明和括号麻痹,请使用一些流水线操作|> :
let fudge (a : float) (b : int) =
a
let cyclesPerWord (a : int) (b : int) =
a
let wordsPerSec (a : int) (b : int) =
a
let cyclesPerInterrupt bps bpw cpu factor =
wordsPerSec bps bpw
|> cyclesPerWord cpu
|> fudge factor
|> floor
答案 2 :(得分:0)
查看函数定义,看起来您正在使用类似C#的语法来调用函数,函数名存在于()之前,并且该函数的相关参数在()内。一个例子是FunctionName(Parameter1 Parameter2)。 F#不使用那种风格。相反,它使用一种样式,其中函数名称和相关参数存在于()中。一个例子是(FunctionName Parameter1 Parameter2)。
表达代码的正确方法是
let cyclesPerInterrupt bps bpw cpu factor =
(floor (fudge (float factor) (cyclesPerWord cpu (wordsPerSec bps bpw) ) ) )
尽管最外面的()并不是必需的。