2012-03-16 15 views
0

学生のみ、ハスケルとの作業を開始し、コードの一部に問題があります。私はこのコードの仕組みを理解していません。誰も私の働き方を説明できますか?haskellコードの理解に問題があります。

+1

あなたはどちらの部分を理解していませんか?あなたはその機能が何をすべきか知っていますか?あなたはHaskellの構文に精通していますか? –

+0

このプログラムチェックブラケットのバランスがどのようになっているのか分かりません... – user713744

答えて

5
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 

check'関数のこの最初のパラメータが開かブラケットをカウントするスタックとして機能します。それは開口ブラケットに遭遇するたびに、それがスタックに追加し、入力行の残りの部分で進行:それは閉じ括弧に遭遇するときに

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

、それは開口ブラケットと進むをポップ:

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

しかし、閉じ括弧とスタック内に残されていない開いたものがある場合、それは失敗します。また

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

、行が終わって、そして閉じられていないブラケットが、残って失敗した場合:

check' _ []  = False 

デフォルトでは、スタックは空です。残りは明らかな境界ケースです。

関連する問題