2008-11-18 12 views
0

У меня синтаксическая ошибка. Я хочу взять слово функции, которая возвращает число с плавающей запятой.F # ошибка синтаксиса

Я думал это даст мне правильный ответ

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

Но это не так. Я пробовал все, что мог придумать, и это просто не для меня. Я знаю, что это что-то глупое, но я не могу думать об этом.

Для справки, fudge принимает float и integer, cyclesPerWord принимает 2 целых числа и словаPerSec принимает 2 целых числа. Пол принимает общий и возвращает float.

ответ

3

Обратите внимание, что вы можете использовать парсеры для гнезда вызова функции так, как вы изначально пытались это сделать, например.

...(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