2
所以我有,我已经从一个教程拉到功能:如何在另一个函数中嵌入函数调用?
let sumOfSquares nums =
nums
|> Seq.map sqr
|> Seq.sum
我已经决定了,我要测试其性能。在蛮力的方法,我会做这样的事情:
let timeFunction nums =
let sw = new System.Diagnostics.Stopwatch()
sw.Start()
nums
|> Seq.map sqr
|> Seq.sum
sw.Stop()
sw.ElapsedMilliseconds
然而,这给我的印象很好的例子为F#应该如何治疗功能一等公民。于是,我像做以下,而不是:
let timeFunction fn x =
let sw = new System.Diagnostics.Stopwatch()
sw.Start()
fn x
sw.Stop()
sw.ElapsedMilliseconds
然后我试图把它叫做:
let sequenceOfNums = [for i in 1..20 -> i]
let print n = System.Console.WriteLine(n.ToString())
print "Time Trial"
print (timeFunction sumOfSquares sequenceOfNums)
然而,这种失败,出现以下错误:
Type mismatch. Expecting a 'a -> unit but given a 'a -> int The type 'unit' does not match the type 'int'
在调用该函数的行上。我在这里是否有某种语法错误,或者我是否严重误解了一个概念?
而管道忽略不会导致它被优化掉或什么,对吧? – GWLlosa 2012-02-10 02:48:24
对。它绝对不会。 – Daniel 2012-02-10 02:58:44