2015-01-15 26 views
1

我试图解决这种类型的equatin:e^x + sqrt(x)= d,当d已知时。它没有解析解,所以我使用二进制搜索的变化来解决这个问题:Haskell错误消息期待多一个参数

helper x = exp x + sqrt x 

ex2 c0 c1 x 
| abs (h0 - h1) < 10 ^^ (-6) = c0 
| hm < x = ex2 m c1 x 
| hm >= x = ex2 c0 m x 
where h0 = helper c0 
    h1 = helper c1 
    m = c0 + (c1 - c0)/2 
    hm = helper m 

这工作得很好,从ghci中(C0和C1是分钟和搜索最大值),但我有问题,阅读从标准输入输出参数x :

main = do 
seed <- getLine 
let output = show ex2 0 6 (read seed :: Floating) -- Result is somewhere between helper(0) and helper(6) 
    in putStrLn output 

这打破了我的代码。它不会编译或加载ghci。我得到这个错误消息:

ex2.hs:14:46: 期待一个更参数“浮动” 预期一个类型,但“浮动”具有一种“* - >约束” 在表达式签名:浮动 在“秀”的第四个参数,即“(读种子::浮动)” 在表达:秀EX2 0 6(阅读种子::浮动)

有人可以解释这意味着什么,以及如何修复我的主要功能?

+0

'Floating'是一个类型类,参见http://hackage.haskell.org/package/base-4.7.0.2/docs/Prelude.html#t:Floating 所以编译器是正确的,你需要指定你想要的类型的实例。 – Yuras 2015-01-15 18:38:42

+0

我也尝试将“Floating”改为“Float”或“Double”,但后来我得到了更多的错误。 – happytomato 2015-01-15 18:44:43

+1

将'Floating'更改为'Float'或'Double',并将putStrLn输出中的'put'改为'putStrLn输出',并将其与'let'对齐到相同的缩进级别。 – user2407038 2015-01-15 18:45:14

回答

1

有括号,出租..行的丢失:

另一个错误:秀(EX2 ...(阅读种子::双人间))需要括号。 - chi

相关问题