さぁ、rubyだ。
ついに、ついに、rubyでプログラミングを始めました(もたもたしてたなぁ > 自分)。なんとなく(作業的に)区切りが良かったのに加え、下記が背中を押してくれました。
- bioruby ( http://www.bioruby.org/ )
- rake ( http://rake.rubyforge.org/ )
- Martin Fowler’s Bliki ( http://capsctrl.que.jp/kdmsnr/wiki/bliki/ )
- Ruby on Rails ( http://www.rubyonrails.com/ )
今のところ印象深いのは、
while gets puts [4,3,2,1,0].collect{|c| $_.chomp.split("\t")[c]}.join("\t") end
という感じのコードを「無理にワンライナー化しようとしなくても」書きそうになってしまうところかな。それにしてもこのコード、どのくらいの計算量(オーダー)がかかるんだろ。関数型言語ちっくなだけに、インタプリタ内部での評価順序を知らないと、効率が悪いのかどうか、わからんなぁ。
とはいえ、書いている側としては小気味よいですね。「指示はきちんと出してやったぞ。さ、評価してくれたまへ」みたいな。エスカレートして、富豪さバクハツのコードを書いてしまいそうです。データ量の多いときは、ちゃっちゃとDBMSに任せるしくみを考える、というスタンスが思想的にはマッチするんでしょうね。
(11/6追記)(同日、追々記)
なかださんのコメントに刺激されて(「そうか、reverseか!」)、もう一度Arrayのリファレンスを見直してみました。
http://www.ruby-lang.org/ja/man/?cmd=view;name=Array http://ruby-doc.org/core/classes/Array.html
どうも僕が、今後よく行うであろう作業にはvalues_atを使うのがよさげです。
while gets puts $_.chomp.split("\t").values_at(4,3,2,1,0).join("\t") end
これで、ldasからgffへもカンタン (ライブラリが必要にならないぐらい :-)
そんでもって、評価順序に関する記述についても探してみました。
「実行」の「メソッドの呼び出し」節 http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4
「引数式を左から右の順番で評価」ということなので、直感的には「プログラムを読んだとおりに評価」と考えてよいのでしょう。