F#语法错误

时间:2008-11-18 02:16:34

标签: f# syntax-error function-calls

我遇到语法错误。 我想发一个返回浮点数的函数。

想到这会给我正确答案

let cyclesPerInterrupt bps bpw cpu factor = 
 floor (fudge (float(factor) cyclesPerWord cpu wordsPerSec bps bpw))

但事实并非如此。我已经尝试了所有我能想到的东西,但这并不是为了我。我知道这是愚蠢的,但我想不出来。

作为参考,fudge采用float和整数,cyclesPerWord采用2个整数,wordsPerSec采用2个整数。 Floor采用泛型并返回浮点数。

3 个答案:

答案 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) ) ) )

尽管最外面的()并不是必需的。