動的にオブジェクトを生成するためには、newObj述語を使います。
以下の例では、新しいオブジェクトabcを生成します。
? <newObj abc>;
オブジェクトを削除するには、delObj述語を使います。
以下の例では、前項までに定義したabcオブジェクトを削除しています。
? <delObj abc>;
オブジェクト内にメソッドを追加するためには、addMethod述語を使います。
以下の例では、オブジェクトabcに対して<a> <b>;というメソッドを追加しています。
? ::abc <addMethod <a><b>>;
オブジェクト内のメソッドを削除するには、delMethod述語を使います。
以下の例では、前項で定義した<a>メソッドを削除しています。
? ::abc <delMethod a>;
オブジェクト内のインスタンス変数に値を設定するためには、setVar述語を使います。
以下の例では、オブジェクトabcのnumというインスタンス変数に1を設定しています。
?::abc <setVar num 1>;
numという変数が以前に使われていない新規の変数ならば新たに追加されます。
すでにあれば、値だけが更新されます。
オブジェクト内のインスタンス変数を削除するには、delVar述語を使います。
以下の例では、前項で定義した変数numを削除しています。
? ::abc <delVar num>;
オブジェクト内のインスタンス配列変数に値を設定するためには、setArray述語を使います。
以下の例では、オブジェクトabcのaryというインスタンス配列変数のインデックス0にに1を設定しています。
? ::abc <setArray ary 1 0>;
インデックスが最後の引数になっていることに注意してください。これは、関数述語としたいために、値を先に指定するようにしています。
インデックスには、数字だけではなく任意の値を設定できます。インデックスにリストを指定すると多次元配列として使えます。 (いわゆる連想配列になっています。)
? ::abc <setArray ary2 "red" (car body)>;
オブジェクトは以下のような形式で静的にも定義できます。
:: < オブジェクト名 メソッド または inheirt 継承オブジェクト >;
例として鳥、ペンギン、鷹のオブジェクトを動的に定義する例を以下に示します。
? <newObj bird>; ? ::bird <addMethod <fly>>; ? ::bird <addMethod <walk>>;
? <newObj penguin>; ? ::penguin <addMethod inheirt bird>; ? ::penguin <addMethod <fly> <!><false>>; ? ::penguin <addMethod <swim>>;
? <newObj hawk>; ? ::hawk <addMethod inherit bird>;
以下を試してみましょう。
? ::bird <swim>; ? ::penguin <swim>; ? ::bird <walk>; ? ::penguin <walk>; ? ::bird <fly>; ? ::penguin <fly>; ? ::penguin <run>; ? ::hawk <fly>; ? ::hawk <walk>; ? ::hawk <swim>;
結果は以下のようになります。
result -- ::bird <swim>> -- unknown 鳥が泳ぐのか分からない result -- ::penguin <swim>> -- true ペンギンは泳ぐ result -- ::bird <walk>> -- true 鳥は歩く result -- ::penguin <walk>> -- true ペンギンは歩く result -- ::bird <fly>> -- true 鳥は飛ぶ result -- ::penguin <fly>> -- false ペンギンは飛ばない result -- ::penguin <run>> -- unknown ペンギンが走るか分からない result -- ::hawk <fly>> -- true 鷹は飛ぶ result -- ::hawk <walk>> -- true 鷹は歩く result -- ::hawk <swim>> -- unknown 鷹が泳ぐのかわからない