iolanguage

演算子によって、一項か二項か扱いが違う?

インクリメント演算子を実装してみて、気づいたけれど、 hoge ++ moge と、しても moge が引数にならなくなったようだ。 ただ、これは演算子に依るようで、右辺(?) が引数扱いになるものもあるみたい。 m := method( v, "call message arguments => " print …

io で hoge++ が実装できるようになっていた。

以前はできなかった、と思う。*1 Number ++ := method( varname := call message previous name now := call sender getSlot(varname) if (now, call sender setSlot(varname, now + 1)) self ) a := 1 a println # => 1 a ++ println # => 1 (後置なので返…

5分問題 やってみた。

(サンプル問題 問題No:201) ■Q1.桁数の不明な整数xの各位の値を合計したものを返す関数を作りなさい。(例:x=123 の場合、1 + 2 + 3 = 6 となる)w2ソリューション株式会社を志望される方へ 事前通知問題に対する回答は、下記「A、B、C、Z」の区分…

どう書く? - self-printing program

さっくり出来そうなのがあったので、思わずやってみた。 久しぶりの投稿なり。 いわゆるself-printing programです。 今まで出てなかったっぽいので投稿してみました。 実行すると、そのソースコードの内容をそっくりそのまま表示するコードを書いてください…

関数呼び出し元のローカル変数を参照&変更する

参照だけでなく、変更も出来るんだなー

Io インスパイアな新言語!

Ioke is a dynamic language targeted at the Java Virtual Machine. It's been designed from scratch to be a highly flexible general purpose language. It is a prototype-based programming language that is inspired by Io, Smalltalk, Lisp and Rub…

スコープを作るメソッド

io のコードを書き散らしたディレクトリを見ていたら出てきた物。 Io 20090105 Io> list(1) foreach(v, v print) 1==> 1 Io> v ==> 1 Io> io はRuby のブロックみたいな事が出来るが、 呼び出し元が汚れてしまう。 そこで書いて見た物。 gist の埋め込み(emb…

進捗率計算プロジェクト

進捗が 67.7% に達しました。 2 / 3 終了です。もう少しじゃー。ちなみに進捗率は http://wiki.livedoor.jp/shin_yan/d/vimperator%202%2e0%20%a5%d8%a5%eb%a5%d7%cb%dd%cc%f5%a5%d7%a5%ed%a5%b8%a5%a7%a5%af%a5%c8?wiki_id=67820 の一番下の表をコピペして…

Rangeのバグ?

Range l := 0 to(9) asList r := 10 to(11) l foreach(x, r foreach(y, list(x, y) println ) ) あれれな出力 list(0, 10) list(0, 11) list(1, 11) ... list(9, 11) こうするのが正しいのか Range l := 0 to(9) asList r := 10 to(11) l foreach(x, r rewin…

再帰するメソッドの罠にはまった。 これって仕様?勘違いしてるのか? f := method(n, if (n > 0, message(foreach) uniqueId println f(n - 1) ) ) f(4) #=> 4477112 4477112 4477112 4477112 異なるオブジェクトを生成しているつもりで、そうなっていない…

引数の有無で挙動を変える

プロパティ的なもの作りたくて考えてみた。 neko tails #=> 1 が返る neko tails(2) #=> 2 を設定 neko tails #=> 2 になってる call sender で呼び出し元のオブジェクトを得て、call argAt(0) name で引数の名前が得られる模様。 なので、 Object argif := …

引数のデフォルト値を簡単に

iolanguageを初めてみた。 可変長引数やデフォルト値付きのメソッドを作りたい時 普通だと faito := method( msg := call message if(msg argCount < 1, "ねこ", call sender doMessage(msg argAt(0))) print "が" print if(msg argCount < 2, "なぐる", cal…