F# 语法错误

F# syntax error

提问人:Paul Nathan 提问时间:11/18/2008 更新时间:12/11/2008 访问量:245

问:

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

我以为这会给我正确的答案

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

但事实并非如此。我已经尝试了我能想到的一切,但对我来说只是没有走到一起。我知道这是一件愚蠢的事情,但我想不出来。

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

F# 语法错误 函数调用

评论


答:

3赞 Brian 11/18/2008 #1

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

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

(如果没有上面的内部 parens 集,这有点像您尝试将 4 个参数传递给 cyclesPerWord,这不是您想要的。

3赞 simonuk 11/18/2008 #2

或者,为了避免失明和括号瘫痪,请使用一些流水线|>:

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赞 Rich McCollister 12/11/2008 #3

查看您的函数定义,您似乎正在使用类似 C# 的语法来调用您的函数,函数名称存在于 ( ) 之前,并且该函数的关联参数位于 ( ) 中。例如,FunctionName(Parameter1, Parameter2)。F# 不使用该样式。相反,它使用一种样式,其中函数名称和关联参数存在于 ( ) 中。例如,(FunctionName、Parameter1、Parameter2)。

表达代码的正确方式是

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

虽然最外层的 ( ) 并不是真正必要的。

评论

0赞 Paul Nathan 12/13/2008
啊啊。我一直在努力弄清楚这一点。