2008-11-18 99 views
0

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

以为这会给我正确的答案

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

但事实并非如此。我尝试了所有我能想到的事情,但这只是为了我。我知道这是愚蠢的,但我想不起来。

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

回答

3

还要注意的是,您可以使用parens以您最初尝试的方式嵌套函数调用,例如,

...(cyclesPerWord cpu (wordsPerSec bps bpw)) 

(无内设置上面括号的,它有点像你试图传递4个参数来cyclesPerWord,这是不是你想要的。)

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 
0

你的函数定义来看,好像你使用的是C#的语法调用你的函数,函数名存在权前()和相关参数该函数在()内。一个例子是FunctionName(Parameter1 Parameter2)。 F#不使用该风格。相反,它使用()中存在函数名称和相关参数的样式。一个例子是(FunctionName Parameter1 Parameter2)。

来表达你的代码正确的方法是

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

虽然最外面的()是不是真的有必要。

+0

Aaah。我一直在试图弄清楚。 – 2008-12-12 23:33:44