このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1381909900/236
#  
#  系列の整合性
#  
#  a. スタックの実装と応用a. ( ),  [ ], {}は整合している.
#  b. 系列wが整合しているとき,(w), [w], {w} は整合している.
#  c. 系列vとwが整合しているとき,vwは整合している.
#  d. 上のa.〜c.で整合しているとされた系列のみが整合している.
#  
#  整合 (a), [a(b)c], {a(b)cd}{e}  不整合 (a}, [a(bc], {a(b)cd}[e}
#  
#  
#  スタックによる整合性判定
#  
#  ・ 左括弧に出会ったら,スタックにpushする.
#  ・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
#    ・違う種類・スタックが空 → 不整合
#  ・ 括弧の列が終わったとき,スタックが空なら整合,
#  


'系列の整合性
a. スタックの実装と応用a. ( ),  [ ], {}は整合している.
b. 系列wが整合しているとき,(w), [w], {w} は整合している.
c. 系列vとwが整合しているとき,vwは整合している.
d. 上のa.〜c.で整合しているとされた系列のみが整合している.
整合 (a), [a(b)c], {a(b)cd}{e}  不整合 (a}, [a(bc], {a(b)cd}[e}
スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'(_ならび) :-
        'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'(_ならび,[]).



'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'([],[]).

'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'([_左括弧|R],_スタック_1) :-
        '左括弧に出会ったら,スタックにpushする.'(_左括弧,_スタック_1,_スタック_2),
        'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'(R,_スタック_2).

'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'([_右括弧|R],_スタック_1) :-
        '右括弧に出会ったら,スタックからpopして同種類の括弧か調べる'(_右括弧,_スタック_1,_スタック_2),
        'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'(R,_スタック_2).

'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'([A|R],_スタック) :-
        左括弧でも右括弧でもない(A),
        'スタックによる整合性判定
・ 左括弧に出会ったら,スタックにpushする.
・ 右括弧に出会ったら,スタックからpopして同種類の括弧か調べる
  ・違う種類・スタックが空 → 不整合
・ 括弧の列が終わったとき,スタックが空なら整合'(R,_スタック).



'左括弧に出会ったら,スタックにpushする.'(_左括弧,_スタック_1,[_左括弧|_スタック_2]) :-
        括弧(_左括弧,_).



'右括弧に出会ったら,スタックからpopして同種類の括弧か調べる'(_右括弧,[_対応する左括弧|_スタック],_スタック) :-
        括弧(_対応する左括弧,_右括弧).



括弧('(',')').
括弧('{','}').
括弧('[',']').



左括弧でも右括弧でもない(A) :-
        \+(括弧(A,_)),
        \+(括弧(_,A)).