2012-12-06 81 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介紹塊(我可能會忘記一些)。