初学者遇到Haskell语法问题

otg*_*g6e 0 syntax haskell parse-error

所以到目前为止我只使用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)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ternary.hs:11:25: parse error on input `c'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Sib*_*ibi 6

你做了很多错事:

  • 除非上下文是a,否则不应使用do-notation Monad.
  • 滥用return:我认为你把returnHaskell的命令式语言混淆了.
  • if/else usage:注意在Haskell中if-else是一个表达式.所以if和else都是强制性的,而不是某些其他语言.
  • 动词似乎是错误的:请参阅此处规则.

使用警卫尝试做的更好的版本:

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
Run Code Online (Sandbox Code Playgroud)

话虽如此,我建议你阅读一些,以便更好地理解.