2012-12-06 48 views
0

我有一个错误说“不正确可能缩进”Haskell的不正确缩进

boyerMooreSearch :: [Char] -> [Char] -> [Int] -> Int 
boyerMooreSearch string pattern skipTable 
            | skip == 0          = 0 
            | skip > 0 && (string length > pattern length) = boyerMooreSearch (substring string skip (string length)) pattern skipTable 
            | otherwise          = -1 
            where 
            subStr = (substring 0 (pattern length)) 
            skip = (calculateSkip subStr pattern skipTable) 

哪些错误呢?任何人都可以在Haskell中解释缩进规则吗?

+1

只是一句话,博耶/摩尔实际上并不能很好地处理'[Char]',因为你需要向后走,然后向前跳等等。对于[Char],我会坚持KMP。 –

回答

4

在符合substr的行上,有一串空白,后跟一个字面制表符字符,并且在与skip相同的行上有相同的字符串,后跟四个空格。这些是不相容的;一个健壮而灵活的方法是在每一行的开始处用一个完全相同的空白字符串排列一行中的东西。

自从你问了以后,真正的规则是选项卡会将缩进级别增加到下一个八位数的倍数,并且所有其他字符都会将缩进级别增加1。块中的不同行必须处于相同的缩进级别。 do,where,let,of介绍块(我可能会忘记一些)。