使用let解析错误(可能是不正确的缩进或不匹配的括号)
我得到
解析错误(可能不正确的缩进或不匹配的括号)
在线与 | 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
我真的对这个原因感到困惑,有人可以为我澄清一下吗?
回答
这是一个缩进错误,您需要在 的定义开头的右侧放置至少一个字符的保护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