我试图解决这种类似的设备:e ^ x + sqrt(x)= d,当d已知时。它没有分析解决方案,因此我使用二进制搜索的变体来解决它:
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是搜索的最小值和最大值)但是我在从stdio读取参数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: 期待“浮动”的另一个论点 期望一种类型,但'浮动'有类型'* - &gt;约束' 在表达式类型签名中:浮动 在'show'的第四个参数中,即'(读取种子::浮动)' 在表达式中:show ex2 0 6(读取种子::浮动)
有人可以解释一下它的含义以及如何修复我的主要功能吗?
答案 0 :(得分:1)
let .. line:
中缺少括号另一个错误:show(ex2 ...(读取seed :: Double))需要括号。 - chi