インタープリタ デザインパターンと LISP の論理的な関係。
  デザインパターンの各解説書でインタープリタ デザインパターンのメタファとして「文法表現」を与えているが、 そのインタープリタ デザインパターンに対し LISP の概念との対応を与えることができる。 インタープリタ デザインパターンと LISP との論理的な関係を以下に示す。

  LISP の概念による説明 | インタープリタ デザインパターンの概念による説明(必要なら Java 言語や Woolpack の API の用語を用いる)
  --- | ---
  静的な型が付けられたS式(多くの LISP 実装は静的型を持たないためこのように表現した) | Expression 役
  副作用 | Context 役への作用
  c言語や機械語で実装された関数の実装 | Expression 役を実装したクラスの interpret メソッド
  関数 | Expression 役を実装したクラス
  LISP 文 | コンストラクタツリー
  defun 関数 | コンストラクタツリーをコンストラクタ内で定義した、 Expression 役を実装したクラス
  リスト | 配列またはリスト(Java言語の場合は java.util.List インタフェース)
  ハッシュテーブル | マップ(Java言語の場合は java.util.Map インタフェース)
  if 関数 | Expression 役を実装した分岐処理クラス(Woolpack の場合は woolpack.validator.IfValidator など)
  progn 関数 | Expression 役を実装した順次処理クラス(Woolpack の場合は woolpack.dom.Serial など)
  nil | Expression 役を実装した null オブジェクト(Woolpack の場合は woolpack.dom.DomConstants#NULL など)

  LISPとの相似性により、インタープリタ デザインパターンは手続き型言語の中で関数型言語を扱うためのパターンであるといえる。
  Woolpack のコンストラクタツリーを Javascript による値検証を例にして以下に示す。 根 Expression 役への参照があったり、 区切りにカンマを使用していたり、 LISP 関数に対応するクラス(new)宣言と括弧の位置が異なったり、 連想配列やリストの宣言方法が異なったりと 表現方法は異なるが、構造の相似性がかなり高いことが観察される。

トップに戻る
Copyright (C) 2006 Takahiro Nakamura. All rights reserved.