「toyの紹介」の編集履歴(バックアップ)一覧はこちら

toyの紹介 - (2008/08/16 (土) 14:20:49) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

まずはインタプリタを起動します。 ソースを 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} 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! . <NATIVE>) (delegate? . <NATIVE>) (method . <NATIVE>) (vars . <NATIVE>) (type? . <NATIVE>) (@name . Object) (var? . <NATIVE>) (eq . <NATIVE>)) いくつかのメンバがいますね。 そのなかには、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; と書ける。 (この頁書きかけ) ----
まずはインタプリタを起動します。 ソースを 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; と書ける。 (この頁書きかけ) ----

表示オプション

横に並べて表示:
変化行の前後のみ表示: