Синтаксическая ошибка F#

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

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

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

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

Для справки, fudge принимает число с плавающей запятой и целое число, cyclesPerWord принимает 2 целых числа, а wordsPerSec принимает 2 целых числа. Этаж принимает общий вид и возвращает число с плавающей запятой.


person Paul Nathan    schedule 18.11.2008    source источник


Ответы (3)


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

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

(Без внутреннего набора скобок выше это похоже на то, что вы пытаетесь передать 4 аргумента в cyclesPerWord, а это не то, что вам нужно.)

person Brian    schedule 18.11.2008

В качестве альтернативы, чтобы избежать слепоты и паралича скобок, используйте некоторую конвейерную обработку |> :

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
person simonuk    schedule 18.11.2008

Глядя на определение вашей функции, кажется, что вы используете синтаксис, подобный С#, для вызова ваших функций, имя функции существует прямо перед ( ), а связанные параметры для этой функции находятся внутри ( ). Примером может служить ИмяФункции (Параметр1 Параметр2). F# не использует этот стиль. Вместо этого он использует стиль, в котором имя функции и связанные параметры находятся внутри ( ). Примером этого может быть (FunctionName Parameter1 Parameter2).

Правильный способ выразить ваш код будет

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

хотя самый внешний ( ) на самом деле не нужен.

person Rich McCollister    schedule 11.12.2008
comment
Ааа. Я пытался понять это. - person Paul Nathan; 13.12.2008