【发布时间】:2015-05-23 09:47:11
【问题描述】:
所以我对 Haskell 只有一点经验,我一直在研究下面的程序来实现搜索以在函数中找到最大值,但我一直收到一个奇怪的错误。当我编译它说:
MaximaSearch.hs:26:1: 解析错误(可能是缩进不正确或括号不匹配)
这行写着“main = do”,所以我认为这是我在其前面的代码中缩进的某种尾随错误,但我找不到任何错误...
代码如下:
module Main where
g :: Float -> Float
--your function here
g x = cos(x^2)
--goldenSectionSearch
goldenSS :: (Float -> Float) -> Float -> Float -> Float -> Float -> Float
goldenSS f a b c tau
| (c-a) < tau * (abs b + abs x) = (c+a)/2
|f x > f b = let
t1|(c - b) > (b-a) = goldenSS f b x c tau
|otherwise = goldenSS f a x b tau
in t1
|otherwise = let
t2|(c-b) > (b-a) = goldenSS f a b x tau
|otherwise = goldenSS f x b c tau
in t2
where
let x
| (c-b) > (b-a) = b + resphi*(c-b)
|otherwise = b - resphi*(b-a)
where resphi = 2 - phi where phi = (1+ sqrt 5)/2
in x
--main
main = do
print x
print (g x)
where
x = goldenSS g a ((a+b)/2) b tau
where
a = 2
b = 3
tau = 0.001
有什么想法吗?
【问题讨论】:
-
请去掉代码示例中的行号。
-
好的,删除数字
-
您的代码有很多问题...特别是,您在
let绑定中使用保护非常奇怪。为什么不直接使用if-then-else表达式呢? -
好吧,我是haskell的新手,但我的意图是实现类似: if(condition 1){ if(condition 2) return value 1 else return value 2} 我曾希望这样做使用嵌套守卫,直到我意识到 haskell 不支持它们,所以我希望模拟嵌套守卫,外部守卫返回 x 和 x 由内部守卫指示
标签: haskell parse-error