【发布时间】:2015-05-23 08:05:36
【问题描述】:
所以到目前为止,我只将 Haskell 用于简单的教程,下面的代码给了我一个“解析错误”...我知道这与我的语法有关,但我不知道是什么
--ternarySearch
7 ternarySearch :: (Float -> Float) -> Float -> Float -> Float -> Float
8 ternarySearch f a b tau = do
9 if (abs(b-a) < tau)
10 then return ((a+b)/2)
11 c = (a + (b-a)/3)
12 d = (b - (b-a)/3)
13 if f(c) < f(d)
14 then return (ternarySearch f c b tau)
15 else return (ternarySearch f a d tau)
我得到的错误是:
ternary.hs:11:25: parse error on input `c'
有什么想法吗?
【问题讨论】:
-
你做错了很多事情:不使用 Monad 的 do-notation、缩进、if/else 是错误的。我建议您在尝试其中的程序之前使用任何教程/书籍来学习 Haskell。
-
是的,不幸的是,这是我第一次涉足该语言。对于初学者:缩进应该是什么样的?这无疑是给我带来麻烦的主要问题之一。
-
nvm 我想我有缩进,但我的主要问题仍然是一样的:是什么导致了解析错误?
-
缺少
else。在大多数其他语言中,else是可选的。在 Haskell 中,if比其他语言中的if更类似于?::if x then y就像在 C 中编写x ? y,并且出于相同的原因会给您一个错误:它是一个表达式,并且当条件为假时,它不能不评估。
标签: haskell syntax parse-error