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(阅读种子::浮动)
有人可以解释这意味着什么,以及如何修复我的主要功能?
'Floating'是一个类型类,参见http://hackage.haskell.org/package/base-4.7.0.2/docs/Prelude.html#t:Floating 所以编译器是正确的,你需要指定你想要的类型的实例。 – Yuras 2015-01-15 18:38:42
我也尝试将“Floating”改为“Float”或“Double”,但后来我得到了更多的错误。 – happytomato 2015-01-15 18:44:43
将'Floating'更改为'Float'或'Double',并将putStrLn输出中的'put'改为'putStrLn输出',并将其与'let'对齐到相同的缩进级别。 – user2407038 2015-01-15 18:45:14