代码之家  ›  专栏  ›  技术社区  ›  Mister Babu

let行出现解析错误(可能是缩进不正确或括号不匹配)

  •  0
  • Mister Babu  · 技术社区  · 3 年前

    我明白了

    解析错误(可能是缩进不正确或括号不匹配)

    在线与 | i > j = do swap axs p j

    apartition :: Ord a => STArray s Int a -> Int -> Int -> ST s Int
    apartition axs p q = do 
      x <- readArray axs p
      let loop i j
        | i > j = do swap axs p j
                     return j
        | otherwise = do u <- readArray axs i
                         if u < x 
                           then do loop (i + 1) j 
                           else do swap axs i j
                                loop i (j − 1)
      loop (p + 1) q
    

    我真的很困惑这件事的原因,有人能帮我澄清一下吗?

    1 回复  |  直到 3 年前
        1
  •  5
  •   willeM_ Van Onsem    3 年前

    这是一个缩进错误,您需要将保护符放置在定义开始的右侧至少一个字符处 loop ,所以:

    apartition :: Ord a => STArray s Int a -> Int -> Int -> ST s Int
    apartition axs p q = do 
      x <- readArray axs p
      let loop i j
           | i > j = do swap axs p j
                        return j
           | otherwise = do u <- readArray axs i
                            if u < x 
                            then do loop (i + 1) j 
                            else do swap axs i j
                                    loop i (j - 1)
      loop (p + 1) q