必修★片桐さん ~パターン照合~

■Matching 
・パターンがアサーションに一致するかどうかをテスト
・実行には2つ引数を用意

実行結果
hanako
hanako
true

【?x is a girl she is a girlで実行】
?x
is
{?x=is}
true


【アサーション: Hanako is a girl】
・TrueであるアサーションをFactと呼ぶ

【パターン: ?x is a girl】

・Hanako is a girl と ?x is a girl のパターンマッチング
 ⇒"?x" を "Hanako"に具体化(変数束縛)し、true

【プログラム】
class Matching
 arg.lengthの長さが一緒かどうか
 一緒なら、Matcherクラスのmatchingへ

class Matcher

public boolean matching(String string1,String string2)
 同じなら成功
 各トークンに分ける
  数が異なったら失敗(countToken)
  定数通しでトークンがマッチングに失敗したら失敗(tokenMatchingで行う)
  最後までOKなら成功

boolean tokenMatching




■Unify
・パターンとパターンが一致するかどうかをテスト
・変数同士の比較をユニフィケーションという


実行結果
【?x ?y ?y byeを実行】
?x
?y
{?x=?y}
true

【?x aiu eo aiuを実行】
?x
aiu
{?x=eo}
true





以下のプログラムはUnifierである
定数同士
44: // 定数同士
45: int length = st1.countTokens();
46: buffer1 = new String[length];
47: buffer2 = new String[length];
48: for(int i = 0 ; i < style="display: none;" id="FLASH_MESSAGE">

構造は、マッチングとほぼ変わらないが、上記のプログラムで全てのトークンをいったん配列に格納している。
これは、ある変数に束縛されたとき、同じ変数名のトークンをあらかじめ具現化しておくためである。


Posted in |

0 コメント: