提问人:Paul Nathan 提问时间:11/18/2008 更新时间:12/11/2008 访问量:245
F# 语法错误
F# syntax error
问:
我遇到了语法错误。 我想讨论一个返回浮点数的函数。
我以为这会给我正确的答案
let cyclesPerInterrupt bps bpw cpu factor =
floor (fudge (float(factor) cyclesPerWord cpu wordsPerSec bps bpw))
但事实并非如此。我已经尝试了我能想到的一切,但对我来说只是没有走到一起。我知道这是一件愚蠢的事情,但我想不出来。
作为参考,fudge 采用浮点数和整数,cyclesPerWord 采用 2 个整数,wordsPerSec 采用 2 个整数。Floor 接受泛型并返回浮点数。
答:
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
啊啊。我一直在努力弄清楚这一点。
评论