hirax.net::inside out::2009年10月26日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年9月 を読む << 2009年10月 を読む >> 2009年11月 を読む

2009-10-26[n年前へ]

「エクセル」と「無名関数」 

 ふと、エクセルほど無名関数(Mathematicaでいうところの純関数)を使っている開発環境はないのではな いか、と考えた(妄想ともいう)。もちろん、エクセルでも関数を定義したり、記述式を定義したりすることができる。しかし、実際にエクセルを使う状況を考えてみれば、「セルに処理を書き入れ(まく)り」「その処理記述に名前を付けたりはしないまま・コピペしまくり、使い回す」ことが多いと思う。これは、「エクセルが配列ベースの無名関数志向開発環境だ」と言えるのではないか、などと考えてみたのである。

 たまに、Rubyでデータ処理し、その結果をエクセルで眺めることがある。そんな時、Rubyとエクセルの組み合せワザのようなことをすることもある。それは、たとえば、こんな具合のコードだ。

d=[]
10.times{d<<'=2*RC[1]'}
d<<ARGV[0]
puts d.join(',')
 '=2*RC[1]'の部分は、エクセルの関数である。そして、それ以外の部分はRubyの関数だ。RC[1]は「自分の右のセル」を指すので、次(右)のセルの2倍という関数である。たいていのデータは、左から右(あるいは上から下)に読み込んでいくので、この例の場合、次(未来)の値を使って演算をしていることが面白い、と感じたりする。
 それでは、このRubyスクリプトをm.rbと名付け、
ruby m.rb > m.csv
として、m.csvを作成する。そして、そのcsvファイルを(セル表示名ををR1C1形式にした)エクセルで開くとデータ列ができあがる、ということになる。上の例であれば、下のような数値が入ったエクセルシートができあがる。
512 256 128 64 32 16 8 4 2 1

 この例のような、複数言語を組み合わせた「闇鍋(やみなべ)ごった煮プログラミング」を上手く活用することはできないだろうか。…そういうことをよく考えるのだけれど、なかなか良いアイデアが思いつかない。何か、面白い位置づけ・適切な使い方がないものだろうか。