2007-04-29[n年前へ]
■「無名関数」と「吾輩は猫である」
夏目漱石の「吾輩は猫である」は、雑誌「ホトトギス」に1905年1月に発表された。最初は、冒頭の章だけで完結する短い読み切り小説だった。
吾輩は猫である。名前はまだ無い。 …吾輩がこの家へ住み込んだ当時は、主人以外のものにははなはだ不人望であった。どこへ行っても跳ね付けられて相手にしてくれ手がなかった。いかに珍重されなかったかは、今日に至るまで名前さえつけてくれないのでもわかる。数学ソフトウェア Mathematica でプログラムのスケッチ(素描)を作りながら、「この「名前はまだ無い・名前をつけてくれない」という言葉が頭の中に浮かんだ。
「吾輩は猫である」を連想したのは、Mathematicaの「純関数」の勉強のための練習題材を書いていたときだ。Mathematica の入門・中級の講習会に参加すると、この純関数とやらが登場した途端に、講師が話す内容を見失ってしまうことが多い。講師の筋道が見えなくなってしまう理由は、純関数の必要性・存在価値といったものが今ひとつわからないままに、純関数がいきなり登場してくるからである。もちろん、「(数値でなく)関数を引数として与える」ということに慣れていない生徒が多いこともあって、いつも、純関数が登場した瞬間に、何かその場が失速したような感覚を受ける。
話の流れ・必然性がなくても、文法をただ暗記することができる人であれば、おそらく何の問題もないのだと思う。あるいは、他のプログラミング言語をよく知っていて、文法の必然性が自然と理解できる人たちであったなら、これもまた問題は起きないのだろうと思う。しかし、私も含めて、入門・中級の講習会に来ているような、そうでない多くの人たちの場合は、純関数が登場した途端に、話についていけなくなることが多いように感じるのである。
Mathematica における純関数 "Pure Function" というのは名前(シンボル)を持たない関数で、ほかの関数への引数などとして、関数の内容を書いた一瞬だけ使われるものだ。もう少し違う呼び方をしてしまえば、つまりそれは「無名関数」だ。「無名」というところが重要で、名前がないから、使ったら最後もう二度と呼ぶ・使うことはできない、ということである。つまりは、「使い捨ての関数」だ。この「関数を使い捨てる」というところで、どうしても引っかかってしまう。値を入力するのであれば、あまり考えることなどせずに、数字キーを2・3回押せばすむ。だから、値に名前(シンボル)と付けずに、使い捨てにすることには慣れている。けれど、関数を書く場合には、(ハッカーでない私たちは)頭も多少使わざるをえない。すると、せっかく考えて・苦労して書いたのだから、名前をつけて、あとで呼んでまた使うことができるようにしたい、などと思ってしまうのである。使い捨ての「無名」ということと、苦労をともなう「関数」ということを、なかなか重ね合わせることができないのである。
そこで、自分なりの「純関数の存在価値・意義」を作ることで、その存在意義を納得したくて、純関数を使った例題を作ってみた。実は、それが前回の Spectrum Color Conversion を動かしているベース部分、「離散化を必要としない連続的なスペクトル演算・表示を扱うためのパッケージ」である。これは、無名関数(純関数)を使うための例題である。このパッケージを使うと、スペクトルを描くのに、
plotSpector[ (128 red[#] + 255 blue[#])& ];というような命令でスペクトルを描くことができる。これは「強度128の赤色と強度255の青色を足したスペクトル」を描けという命令なのだが、この中の
(128 red[#] + 255 blue[#])&という部分が、「強度128の赤色と強度255の青色を足したスペクトル」を表す無名関数だ。あるいは、
rgb=fitSpector[(D65[#]-128 cyan[#])&,red,green,blue]というのは、「シアン色が128載せられた色」を、赤色と青色と緑色で近似しろという命令であるが、この (D65[#] - 128 cyan[#])& というのも、「シアン色が128載せられた色」という無名関数である。こういう書き方をしてみると、スペクトルを示す「関数」ではあるが、見方によっては、スペクトルという「値」のようにも見えると思う。値のように見えることで、スペクトルを示す無名関数を引数として他の関数(命令)に渡すことへのアレルギーを低減してみようとしたのである。そして、(128 red[#] + 255 blue[#])& というようにあまり考えることなく直感的に無名関数を書くことができるようにすることで、その関数を使い捨てることへの違和感を減らそうとしてみた。さらに、こういった内容であれば、下手な名前をつけてしまうよりも、式そのままの方が内容・意味がわかりやすい、ということを実感してみようとしたのである。たとえば、(128 red[#] + 255 blue[#])& であれば、この式自体が「強度128の赤色と強度255の青色を足したスペクトル」という風に話しかけてくるように感じられ、下手に名前をつけてしまうよりは内容が見えることがわかると思う。
こんな例題を作ることで、無名関数アレルギーが低減した、と言いたいところなのだけれど、関数を使い捨てることには、やはりまだ慣れることができそうにない。関数を引数として渡すことは自然に感じられるようになっても、無名関数に名前をつけて、再度その関数を呼んでみたい気持ちはなかなか止められそうにない。名前をつけるより、その関数の中身をそのまま書いた方がわかりやすいとわかっていても、単純な名前をつけてしまいたくなる欲望はなかなか止められそうにない。
その理由を考えてみると、やはり、苦労をともなう「関数」を使い捨ての「無名」にしてしまう、ということに一因がある。そして、もう一つ、名前をつけることで、単純化して安心してしまいたくなる、ということがあるように思う。ほんの何文字かの関数であっても、その内容を自分の頭で考えるよりは、なにがしかの単純な言葉で表現された関数名を聞いて納得したくなることがあるように思う。
「吾輩は猫である」の第一章の最後、つまり、当初の読み切り短編小説「吾輩は猫である」はこのように結ばれる。
吾輩は御馳走も食わないから別段 肥りもしないが、まずまず健康でびっこにもならずにその日その日を暮している。鼠は決して取らない。おさんは未だに嫌いである。名前はまだつけてくれないが、欲をいっても際限がないから生涯この教師の家で無名の猫で終るつもりだ。「吾輩は猫である」を思い浮かべながら、無名関数について考えたせいか、それ以来、無名関数が「吾輩は~」と話しかけてくるような気がするようになった。無名関数を書くと、どこかで世界を眺めながら、「我が輩は青色と緑色を足した色である。名前はまだない」「名前はまだつけてくれないが、欲をいっても際限がないから生涯ここで無名で終るつもりだ」と無名関数が呟いているさまが目に浮かぶようになった。存在意義はあるけれど、無名のままの関数、そんなものを思い浮かべながら作ったのがSpectrum Color Conversion である。
2007-07-12[n年前へ]
■人の動きと最適化
from n年前へ.
目には映りにくい「働く人の間のつながりといった社会的な価値あるもの」も、高い株価というカタチできちんとその価値が目に見えるモノにされているんだ
12年経つと21世紀がやってきます。世界はより支え合わなければ生きていけない時代であります。「3年B組金八先生」 第3シリーズ 12話(1988)
MITの最初のハッカー達の書いたプログラムは、その言語なんか関係なく、とにかく完全で、美しいものだったんだ。努力に努力を重ねて뒰ꓢ믅뻥꒲꒿꒵ꆣ쎯꒬뢫꓆ꓢꆢそれ以上改善する余地はまったくないほどにね柴田 ただ、あまりにも短く最適化してしまうと、人がそれを見たときに理解しにくいという難点がありますよね それはそうだよ。でも、それを理解しようとする努力は、必ず報われるんだよ。努力して理解できるようになったときに、何かを学ぶことができるんだ。だから、コインには2つの面があるということさSteve Wozniak
いつもより多くの「いろんな気持ち」が水に変わる。もしかしたらそれは数ミリグラムだけしか多くないかもしれないけれど、いつもより気持ちがほんの少しは軽くなるのかもしれない。 14ミリグラムの「いろんな気持ち」
晴れの日に野外で上を仰ぎ見た時、無限に続いて見える、広い空間。 新明解国語辞典「大空」
人が上手く動けないほど、「震源地ゲーム」は面白い。逆に言えば、-震源地-から全く同じように動きが伝わる世界なんてつまらない。コピー&ペーストのように、何も変わらないまま動いていくそんなものは少しつまらない。 誰かが無意識に動いて、その無意識の動きの中に違う何かを他の誰かが見いだして、そしていつの間にか時間をかけて何か不思議な波が伝わっていく、そんな世界の方がきっと面白いと思う。 震源地ゲーム
2007-12-26[n年前へ]
2009-01-16[n年前へ]
■「オートバイ小説」と「ハッカー小説」
妄想半分に、「ハッカー小説」は「オートバイ小説」と似ているのかもしれない、と思うことがあります。「クルマ小説」でなく、あくまで、「オートバイ小説」です。バイク乗りたちは、どのバイクに乗るか・好きかと、とてもこだわりますが、そんな「オートバイ小説」に「ハッカー小説」に似ている、と思うのです。
斎藤美奈子は「文学的商品学」の中で、オートバイが主題の小説は、文学的商品学に
- 男主人公がバイクを通じ成長する「ザ・男の成長譚」
- 女主人公が二輪免許と引き替えに男を捨てる「ザ・女の自立譚」
少し面白いのが、タイヤが2つ増えた「四輪」小説だと、四輪車=車は単なる「人格を持ったもの」でなく、「(男性にとっての)女性のメタファ」になってしまう、と斎藤美奈子は言うのです。たとえば、こんな具合に。
正直なところ、ぼくはあのお転婆なイタリア娘、アルファ・ロメオとのつきあいで、くたびれ果てていたのである。しかし、四輪小説と違って、バイク小説の場合には、オートバイは「人格を持ったもの」として描かれ「人車一体」になることはあっても、「(男性にとっての)女性のメタファ」にまではなっていない、というのは実に興味深いところです。
五木寛之 「雨の日には車をみがいて」
コンピュータ管理者の仕事に就いた天文学者が、コンピュータへの侵入者を追いかけていく「ハッカー小説」である「カッコウはコンピュータに卵を産む」を読んでいると、ハッカーたちは実に「コンピュータ」にこだわります。その結果、コンピュータは単なる道具でなく「人格をもったもの」に見えてきたり、さらには、人格どころか「神格」をもった神・宗教に見えてきたりするのです。
コンピュータ侵入者は"ps -eafg"と入力した。どうでしょうか?ここで描かれるコンピュータOSは、単なる道具でなく、まさに神格を持つなにものかに見えてきます。そして、ハッカーたちは、それぞれのバイクならぬコンピュータの中に一体化していくのです。ね?「ハッカー小説」は「オートバイ小説」と似ている、と思いませんか?
デイヴはにやりと笑った。
「バークレーUNIXには、これ(プロセスを表示する"ps"コマンドにfフラグ)はない。fはAT&T/UNIXで個々のプロセスのファイルを表示するコマンドだ。バークレーUNIXはこれを自動的にやってのけるから、fフラグは必要ない」
「コンピュータ侵入者はバークレーUNIXを知らない。旧世代のUNIX信者だ」
「異教徒だ」
デイヴはコマンド中のただ1文字をもって西海岸の全コンピュータ人口を無罪放免にした。
さらにバイク小説との比較を続け考えてみていくと、男性ハッカーがコンピュータを通じ成長する「ザ・男の成長譚」も実際すでにたくさんありそう(書かれていそう)です。ただ、女主人公がハッカー免許と引き替えに男を捨てる「ザ・女の自立譚」がすでに書かれているのか?それを果たして女性が魅力的に感じるかどうか?ということに、頭を捻り・悩んでいるのです。
2012-02-24[n年前へ]
■超簡単で超上級ハッカーも満足する言語 Juliaでハロー・オッパイ
「チョー簡単で超上級ハッカーも満足する言語 Julia」をインストールしました。Juliaは
sudo make -C external install-lighttpdとした上で、
./launch-webserverとすると、WEBブラウザからグラフィカル・インタラクティブ・シェルを起動することができます(動作確認:OSX LION)。たとえば、ローカルマシンのJuliaを使うなら、"http://localhost:2000"にブラウザからアクセすると、ブラウザ内にグラフィカル・インタラクティブ・シェルが表示され、操作することができるようになります。
グラフィカルに作業ができるようになれば、Juliaで何かを描いてみたくなります。そこで、まずは定番の「Hello World」、こんにちは世界、こんにちは赤ちゃん的な何か…つまりはハローオッパイなコードを実行させてみることにしました。
Juliaのために選んだハローオッパイは(ヤング率的に)かなりヤングな「おっぱい断面方程式」です。それをJulia の文法に沿わせると、
plot(x->(3*x*log(x) -(1/36/exp(-(36*x-36/2.718)^4))),0,1)という コードになります。コードを書いてリターンキーをポン!と叩くや否や、超簡単で超上級ハッカーも満足する生まれたての言語 Juliaが描き出す「ハロー・オッパイ」が、こんなボリューミーで(ヤング率的にはかなりヤングな)「おっぱい」です。