F # синтаксическая ошибка - PullRequest
0 голосов
/ 18 ноября 2008

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 18 ноября 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
3 голосов
/ 18 ноября 2008

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

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

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

0 голосов
/ 11 декабря 2008

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

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

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

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

...