Haskell 语法的初学者问题
Beginner trouble with Haskell syntax
所以到目前为止,我只将 Haskell 用于简单教程,下面的代码给了我一个 "parse error"...我知道这与我的语法有关,但我'我不知道什么
--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
- 误用
return
:我认为您混淆了命令式语言 return
和 Haskell 的语言。
- if/else用法:注意在Haskell中if-else是一个表达式。因此,与某些其他语言相比,if 和 else 都是强制性的。
- 缩进好像有误:见rules here.
你正在尝试使用守卫做的事情的更好版本:
ternarySearch :: (Float -> Float) -> Float -> Float -> Float -> Float
ternarySearch f a b tau
| abs (b-a) < tau = (a+b) / 2
| f c < f d = ternarySearch f c b tau
| otherwise = ternarySearch f a d tau
where
c = a + (b-a)/3
d = b - (b-a)/3
话虽如此,我建议您阅读一些内容 book 以获得更好的理解。
所以到目前为止,我只将 Haskell 用于简单教程,下面的代码给了我一个 "parse error"...我知道这与我的语法有关,但我'我不知道什么
--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
- 误用
return
:我认为您混淆了命令式语言return
和 Haskell 的语言。 - if/else用法:注意在Haskell中if-else是一个表达式。因此,与某些其他语言相比,if 和 else 都是强制性的。
- 缩进好像有误:见rules here.
你正在尝试使用守卫做的事情的更好版本:
ternarySearch :: (Float -> Float) -> Float -> Float -> Float -> Float
ternarySearch f a b tau
| abs (b-a) < tau = (a+b) / 2
| f c < f d = ternarySearch f c b tau
| otherwise = ternarySearch f a d tau
where
c = a + (b-a)/3
d = b - (b-a)/3
话虽如此,我建议您阅读一些内容 book 以获得更好的理解。