<cl> (equal '(a b c) '(a b c)) T <cl> (match '(a b c) '(a b c)) T <cl> (match '(?x b c) '(a b c)) T <cl> (equal '(?x b c) '(a b c)) NIL <cl> (match '(?x b a) '(a b c)) NIL <cl> (match '(?x b a) '(b a)) NILというように対応するかどうかを調べることが可能です. しかし,実際の応用では,パターンに用いた変数が何とマッチングすれば二つ のデータが照合可能かということを知りたいことが多く, 変数のバインディング情報を参照できるようにしなければいけません. また,
<cl> (match '(lambda (?x) (list ?x)) '(lambda (a) (list b))) NIL <cl> (match '(lambda (?x) (list ?x)) '(lambda (a) (list a))) Tという具合に同じ変数がパターンの中に複数回現れる場合には, 2度目に現れた?xがbと対応するかどうか比較する際に, すでに,?xがaと対応していなければならないという条件を 考慮してマッチングの比較がなされなければなりません. つまり,変数を含むパターンとデータのマッチング処理は,equal関数と 似た形をしますが,変数が出てきたところで,その変数がすでに あるデータとマッチングされているかどうか,そして,何にマッチング されているかという変数のバインディング情報を保存した形で マッチングがなされる必要があります.