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 など) |
マクロ | コンストラクタツリーを生成する処理自体 |
var validator_tree = new BranchByIdValidator({ "id0":new BranchByNameValidator(new AndValidatorIterable(),{ "key0":new SerialValidator(new AndAndValidatorIterable(),[ new IfNotValidator(new RequiredValidator(), new MessageValidator("key0 required")), new IfNotValidator(new MinLengthValidator(2), new MessageValidator("key0 min length")), new IfNotValidator(new MaxLengthValidator(4), new MessageValidator("key0 max length")) ]), "key1":new SerialValidator(new AndAndValidatorIterable(),[ new IfNotValidator(new RequiredValidator(), new MessageValidator("key1 required")), new IfNotValidator(new MinLengthValidator(3), new MessageValidator("key1 min length")), new IfNotValidator(new MaxLengthValidator(5), new MessageValidator("key1 max length")) ]) }), "id1":new BranchByNameValidator(new AndValidatorIterable(),{ "key0":new SerialValidator(new AndAndValidatorIterable(),[ new IfNotValidator(new RequiredValidator(), new MessageValidator("key0 required")), new IfNotValidator(new MinLengthValidator(4), new MessageValidator("key0 min length")), new IfNotValidator(new MaxLengthValidator(6), new MessageValidator("key0 max length")) ]), "key1":new SerialValidator(new AndAndValidatorIterable(),[ new IfNotValidator(new RequiredValidator(), new MessageValidator("key1 required")), new IfNotValidator(new MinLengthValidator(5), new MessageValidator("key1 min length")), new IfNotValidator(new MaxLengthValidator(7), new MessageValidator("key1 max length")) ]) }) }); |