F#此值不是函数

时间:2019-03-31 11:03:03

标签: f#

玩F#,看来我找不到错误所在。

  

FS0003该值不是函数,不能应用。你是否   忘记终止声明?

     

蒸发器25.0 10.0 10.0

let evaporator (volumeMl:double) (evapPerDaydouble:double) (threshold:double):int =
    let mutable counter = 0
    let mutable currentVolume = volumeMl
    while (currentVolume > (volumeMl * (threshold / 100.))) do
        currentVolume <- currentVolume - ((currentVolume * threshold / 100.))
        counter <- (counter + 1)
    counter

let result = evaporator 25.0 10.0 10.0

printfn "%f" result 

更新

使用;;

修改的代码
let result = evaporator 25.0 10.0 10.0;;

它正在按预期方式工作。奇怪。

更新2

enter image description here

1 个答案:

答案 0 :(得分:4)

初始代码的唯一问题是您使用的是printfn "%f"而不是printfn "%i"

如果通过添加;;解决了您的问题,那么我认为您正在FSI中运行它,并在FSI中看到了编译器错误。很好,但是也许您是直接在FSI提示符下键入或粘贴代码?

我对所有以F#开始的人,甚至是经验丰富的F#用户,都建议从不键入或粘贴代码到FSI。在编辑器中编写代码,选择它,然后将其发送给FSI。这样,您不必担心记住分号,并且在键入时会得到编译器错误和建议。我已经在F#中工作了很多年,而无需直接输入FSI。

此外,如果更改它们,请不要忘记在FSI中重新运行所有函数和类型定义。如果您看到令人困惑的错误,最好重置FSI并从干净状态开始。