まずはインタプリタを起動します。
ソースを make すると toysh という実行ファイルができます。


   csh(162)> toysh



hello world はこう書きます。


   > println "Hello world!"
   Hello world!
   result[NIL]=> nil



ローカル変数への値の設定は set を使います。


   > set a 100
   result[INTEGER]=> 100



a という変数に、整数の 100 を設定しました。
これを参照するには、シンボル(a のこと) に '$' をつけて参照します。
シェルのようですね。


   > println $a
   100
   result[NIL]=> nil



変数 a の内容を b という新しい変数に設定してみます。


   > set b $a
   result[INTEGER]=> 100
   > println $b
   100
   result[NIL]=> nil



関数を作ってみます。


   > set foo [fun (a) {println $a}]
   result[FUNC]=> (a) {println $a;}



ここでは、名前なしの関数を作って、変数 foo に設定しました。
fun は関数を作る関数、(a) は引数リスト、その後の '{' と '}' で囲まれた部分が実行の本体です。

では、呼び出してみます。


   > $foo "Hello world!"
   Hello world!
   result[NIL]=> nil



関数の本体は、変数 foo に格納されていますので、$foo として参照し、引数を与えて実行します。

もちろん、名前つきの関数も定義できます。
defun という関数で定義します。


   > defun foo (a) {println $a}
   result[FUNC]=> (a) {println $a;}
   > foo "Hello world!"
   Hello world!
   result[NIL]=> nil



関数の中から戻り値を返すには return を使います。


   > defun foo (a) {return $a}
   result[FUNC]=> (a) {return $a;}
   > foo "Hello world"
   result[STRING]=> Hello world
   > println [foo "Hello world"]
   Hello world
   result[NIL]=> nil



'[’ と ']' に囲まれた部分は、その行が実行される前に評価され、引数として渡されます。
上の例だと、println の引数である [foo "Hello world"] の部分ですね。
tcl を知っている人は似ていると思いますよね。


次に、オブジェクトを生成してみます。


   > set x [new]
   result[OBJECT]=> (object)Object



new という関数がオブジェクトを生成します。
この場合、デフォルトで Object というオブジェクトにデレゲートするオブジェクトが生成されます。
その後、x という変数にオブジェクトを設定しました。

今作ったオブジェクト(x に設定されている) のメンバを見てみます。
vars というメソッドを実行してみます。


   > $x vars
   result[LIST]=> ((@name Object))



@name というメンバしかいません。
では、Object オブジェクトのメンバを見てみます。


   > Object vars
   result[LIST]=> (set! delegate? method vars type? @name var? eq)


いくつかのメンバがいますね。
そのなかには、method というのもいますね。これでメソッドを定義できます。


   > $x method foo (args: a) {$a each var: i do: {print $i " "}; println}
   result[FUNC]=> (args: a) {$a each var: i do: {print $i  ;};println;}



x に設定されているオブジェクトに対して、foo というメソッドを定義しました。
foo の引数は args: a となっています。これは、可変長引数を a で受け取るという意味です。

実行してみますと、


   > $x foo "Hello" "world" "!"
   Hello world ! 
   result[NIL]=> nil


foo の処理内容は、args: a で受けた引数のリストを、List オブジェクトの each メソッドで順番に表示するというものです。


今度はクラスを定義してみます。


   > class myclass
   result[OBJECT]=> (object)Object



class という関数を使います。
これで、名前つき(この場合は myclass)のクラスができました。
実は、クラスというのは便宜上の呼び方で、名前をつけたオブジェクトをクラスと呼んでいるに過ぎません。

クラスからオブジェクトを生成します。


   > set x [new myclass]
   result[OBJECT]=> (object)myclass



new に先ほど作ったクラス名を指定するだけです。
こうすると、新しく作ったオブジェクトのデレゲート先が myclass になるということです。

myclass にメソッドを定義します。
これは、さっき $x にメソッドを定義したのと同じです。


   > myclass method foo (args: a) {$a each var: i do: {print $i " "}; println}
   result[FUNC]=> (args: a) {$a each var: i do: {print $i  ;};println;}



で、myclass にデレゲートするオブジェクト x に対して、今作ったメソッドを適用してみます。

   > $x foo "Hello" "world" "!"
   Hello world ! 
   result[NIL]=> nil


呼べました。


Hash や Array の使い方は以下のとおりです。

   > set h [new Hash]
   > $h set key "value"
   > $h get key
   result[STRING]=> "value"


インスタンスの内容にアクセスするための簡易な方法があります。

   > [$h get key]

と、

   > $h,key

というのは等価な操作となります。
つまり、

   set h [new Hash];
   $h set key "abc";
   println [$h get key];

は、

   set h [new Hash];
   $h set key "abc";
   println $h,key;

と書ける。


(この頁書きかけ)























最終更新:2008年08月16日 14:20