【コラム】括弧の話(その1)(ITコミュニケーションブランチ)
18.07.11
括弧(かっこ)にはいろいろな種類がありますが,文字どおり意味をとると,括る(くくる)ための弧(こ)(と)というわけで,今日の話は丸括弧です.以降,単に括弧といえば丸括弧のことです.
カッコとコッカの文法
括弧には,始め括弧(左括弧,または,開き括弧)と終り括弧(右括弧,または,閉じ括弧)とがあり,2つを対(つい)にして使います.始め括弧と終り括弧とはそれぞれ,カッコ,コッカと呼びます.(この呼称は一般的ではありませんが古参のLISPer(LISP言語の使い手)には良く知られています.)
カッコとコッカを対で使うことは,カッコとコッカとを使った表現には正しいものと不正なものがあり,正しい表現を生成するための文法があるということです.
さて,その文法はどんな文法でしょうか.「カッコ-コッカの文法」ですから,カッコとコッカだけの表現を考えることにしましょう.まず,カッコとコッカは対で使うので,それぞれの数が等しくないといけません.
(()(()))()
これは正しいですが,
()((())
や
()(()))
は不正です.カッコとコッカの数があっていません.ではカッコとコッカの数が等しいだけでよいのでしょうか.そうではありませんよね.
())((())
これらは,カッコとコッカの数は等しいものの,正しい対になっていません.そういうわけで,「括弧の文法」は,
1. カッコに対応するコッカはそのカッコの後に必ず1つだけ出現する
2. コッカに対応するカッコはそのコッカの前に必ず1つだけ出現する
となります.
カッコとコッカの文法にあっているかチェック
カッコまたはコッカが書かれたカードを一列に並べたものが「カッコとコッカの文法」にあっているかを機械的に調べる方法を紹介しましょう.
1. ポインタ(赤い矢印)を最初のカードの位置に置く.
2. ポインタが指すところにカードがなければ,6.へ
カードがあれば,3.へ
3. ポインタが指すところのカードがカッコならば,そのカードを1つ上の段に置き,5.へ
コッカならば,4.へ
4. 1つ上の段にカッコがなければ,アウト!文法違反.終了
カッコがあれば,一番近いカッコと今見たコッカとを2つ上の段に上げて,5.へ
5. ポインタを1つ右へずらして,2.へ
6. 1つ上の段にカッコが残っていれば,アウト!文法違反.終了
残っていなければ,ヤッタネ!文法どおり.終了
実際にやってみましょう.
最初のカードのところにポインタを置いて,そのカードを読みます.
カードはカッコなので,そのカードを1つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはカッコなので,そのカードを1つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはコッカなので,上の段にある一番近いカッコと今読んだコッカのカードとを両方とも2つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはカッコなので,そのカードを1つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはカッコなので,そのカードを1つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはコッカなので,上の段にある一番近いカッコと今読んだコッカのカードとを両方とも2つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはコッカなので,上の段にある一番近いカッコと今読んだコッカのカードとを両方とも2つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはコッカなので,上の段にある一番近いカッコと今読んだコッカのカードとを両方とも2つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはカッコなので,そのカードを1つ上の段に移動します.
ポインタを1つ右へずらし,そのカードを読みます.
カードはコッカなので,上の段にある一番近いカッコと今読んだコッカのカードとを両方とも2つ上の段に移動します.
ポインタを1つ右へずらすと,そこにはカードはありません.1つ上の段は空なので,「ヤッタネ!文法どおり」です.
※ITコミュニケーションブランチは平成31年度から,「図書館司書・ITコース」になります.