2012-03-16 75 views
0

是一名學生,剛開始與Haskell一起工作,並且遇到部分代碼問題。我不明白這個代碼是如何工作的。任何人都可以解釋我的工作原理嗎?haskell代碼理解問題

check :: String -> Bool 
check = check' [] where 
    check' []  []  = True 
    check' _  []  = False 
    check' x  ('(':xs) = check' ('(':x) xs 
    check' ('(':x) (')':xs) = check' x xs 
    check' _  (')':xs) = False 
    check' x  (_ :xs) = check' x xs 
+1

你不知道哪一部分?你知道這個功能應該做什麼嗎?你是否熟悉Haskell語法? – 2012-03-16 16:19:11

+0

我不明白這個程序如何檢查括號的平衡... – user713744 2012-03-16 16:22:55

回答

5

check'函數的該第一參數用作堆棧計數開括號。每次遇到一個開口托架時,它其追加到堆棧和與所述輸入線的其餘部分進行:

check' x ('(':xs) = check' ('(':x) xs 

然後,當它遇到的關閉托架,它彈出開口支架和前進:

check' ('(':x) (')':xs) = check' x xs 

但是,如果有一個右括號和留在堆棧中沒有打開的,它失敗:

check' _ (')':xs) = False 

此外,如果該行是結束了,並且未封閉的括號保持,失敗:

check' _ []  = False 

默認情況下,堆棧爲空。其餘的是明顯的邊界情況。