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
check'
関数のこの最初のパラメータが開かブラケットをカウントするスタックとして機能します。それは開口ブラケットに遭遇するたびに、それがスタックに追加し、入力行の残りの部分で進行:それは閉じ括弧に遭遇するときに
check' x ('(':xs) = check' ('(':x) xs
、それは開口ブラケットと進むをポップ:
check' ('(':x) (')':xs) = check' x xs
しかし、閉じ括弧とスタック内に残されていない開いたものがある場合、それは失敗します。また
check' _ (')':xs) = False
、行が終わって、そして閉じられていないブラケットが、残って失敗した場合:
check' _ [] = False
デフォルトでは、スタックは空です。残りは明らかな境界ケースです。
あなたはどちらの部分を理解していませんか?あなたはその機能が何をすべきか知っていますか?あなたはHaskellの構文に精通していますか? –
このプログラムチェックブラケットのバランスがどのようになっているのか分かりません... – user713744