このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

パターンマッチング

パターンは、ノードaに対してマッチングされ、マッチングが成功すると内容が評価されてパターン全体の値を得る。マッチング失敗のときは、内容の評価に進まず、評価は中止される。

説明の便宜上の話であるが、マッチングの失敗を表すためにundefinedを使う。つまり:

  • パターンマッチングが失敗したら、eval(a, P) はundefinedを返す。
  • パターンマッチングが成功したら、eval(a, P) はundefined以外を(nullでもよい)を返す。

マッチングが成功するとは:

  1. ノードaがパターンPのセレクターにマッチする。
  2. 条件式があるときは、条件式を評価した値がすべて真になる。

条件式の真偽値は次のように定義される。

  1. false, null, undefined, [], {} は偽である。({}は追加)
  2. その他はすべて真である。

条件式は、ノードaをコンテキストノードとして評価される。つまり、内容と同じ評価環境で条件式が評価される。元のパターンと同じ評価環境ではない。