Итак, у меня есть функция, которую я извлек из учебника:
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)
Однако это не удается из-за следующей ошибки:
Несоответствие типов.Ожидается единица 'a ->, но дано значение' a -> int. Тип 'unit' не соответствует типу 'int'
в строке, которая вызывает функцию.Есть ли у меня какая-то синтаксическая ошибка или я неправильно понял концепцию?