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載せられた色」という無名関数である。
こんな例題を作ることで、無名関数アレルギーが低減した、と言いたいところなのだけれど、関数を使い捨てることには、やはりまだ慣れることができそうにない。関数を引数として渡すことは自然に感じられるようになっても、無名関数に名前をつけて、再度その関数を呼んでみたい気持ちはなかなか止められそうにない。名前をつけるより、その関数の中身をそのまま書いた方がわかりやすいとわかっていても、単純な名前をつけてしまいたくなる欲望はなかなか止められそうにない。
その理由を考えてみると、やはり、苦労をともなう「関数」を使い捨ての「無名」にしてしまう、ということに一因がある。そして、もう一つ、名前をつけることで、単純化して安心してしまいたくなる、ということがあるように思う。ほんの何文字かの関数であっても、その内容を自分の頭で考えるよりは、なにがしかの単純な言葉で表現された関数名を聞いて納得したくなることがあるように思う。
「吾輩は猫である」の第一章の最後、つまり、当初の読み切り短編小説「吾輩は猫である」はこのように結ばれる。
吾輩は御馳走も食わないから別段 肥りもしないが、まずまず健康でびっこにもならずにその日その日を暮している。鼠は決して取らない。おさんは未だに嫌いである。名前はまだつけてくれないが、欲をいっても際限がないから生涯この教師の家で無名の猫で終るつもりだ。「吾輩は猫である」を思い浮かべながら、無名関数について考えたせいか、それ以来、無名関数が「吾輩は~」と話しかけてくるような気がするようになった。無名関数を書くと、どこかで世界を眺めながら、「我が輩は青色と緑色を足した色である。名前はまだない」「名前はまだつけてくれないが、欲をいっても際限がないから生涯ここで無名で終るつもりだ」と無名関数が呟いているさまが目に浮かぶようになった。存在意義はあるけれど、無名のままの関数、そんなものを思い浮かべながら作ったのがSpectrum Color Conversion である。
2007-07-16[n年前へ]
■創造性とミューズ
世界は限りなく広い。けれど、それと同時に、そんな世界はとても狭い、と感じる瞬間があるのも事実だ。どんなに長く生きていても、地球の上にいる99.999…%の人には一度も会うことはない。けれど、意外なところで、よく知っている名前や顔と再開することがある。
画像処理のプログラムを作るために古今東西の絵画のテキストを読んでいる時に、こんな一節に出会った。
以前クヌースというアメリカの数学者と話したとき、「絵を描くとき、自分の意志というより、頭の中に誰かがいて、わたしの感性を左右するらしく…」森鴎外も、なんだか自分を支配するものが頭の中にいて…などと書いていますが、それはこういうことだったか…」とわたしは言いました。 安野光雅 「絵の教室」
画像処理アルゴリズムを考えるために、絵画の本を読む。そして、ドナルド・クヌースに出会う。こういった巨人を見ると、世界が実に小さなものに見える。それは、一種の錯覚のであるとも思う。けれど、こうした巨人が世界を繋ぐ高速道路の役割を果たしているのも、また一面の真実であるとも思う。
森鴎外や安野光雅や口にした「頭の中にいる誰か」「感性や自分を支配するもの」の名前を、クヌースというアメリカの数学者は口にする。
はじめ、原因不明のふとした着想から考えを進めるのだが、すると、ひとりでに論証の車がまわりはじめて、論文が楽にできあがる。…思うに背後にいるのは、ミューズだよ。 ドナルド・クヌースクヌースが言葉にした「頭の中にいる誰か」は、ギリシャ神話で芸術を司る9人の女神"ミューズ"である。私たちの頭の中で9人のミューズたちが踊り、絵画や文芸や論文やプログラムを作らせる。何だか、とても面白い。
2007-08-14[n年前へ]
■夏の日
県道沿いの小さな小さな港には、いつも10人くらい人がいる。いつだって、それだけの人がいる。それだけの人しかいない。60過ぎくらいの人が3人と、中国人が3人と、カップルが一組と、2,3人のこどもだ。
天気が良い日には、強い日差しと遠くの積乱雲が、その人たちの上にある。風向きが悪い日には、誰もいない。
RFIDタグ付きランドセルで仲良しグループ情報を手に入れ、そして、先生たちはどんな風に小学生に接していくんだろうか。 2006.8.14
我々もまた、次の世代、そのまた次の世代のために、何か人間が幸せになれるようなことを残さなければならない責任があるのです。 3年B組金八先生 第16話 1980.2.8
彼氏が他の女に走っても取り戻せるかもしれないけれど、男に走ったらもう戻ってこないような気がする」「彼氏が男に走ったら、私は一体何だったの?という気になる」
人は「人口の多い方向を魅力的に感じて惹かれ動いていく。だから伝染病もそんな風に伝染する」
数学は人生の役に立つと思いますか。
2007-12-23[n年前へ]
2008-06-28[n年前へ]
■「Mathematica開発者のウルフラム」と「ファインマン」
今週頭に「数式処理アプリケーションのMathematicaが最初にリリースされてから、今日で20年たちました」と、開発者Stephen WolframからMathematicaユーザにメールが送られてきた。スティーブン・ウルフラムが28才の時の1988年の6月23日にMathematica 1.0 が出荷されたのである。
For twenty years we've pursued our long-term vision for Mathematica.
Mathematicaは結局のところ、パターンマッチングを延々と行うプログラムである。データベースに登録されているパターン・規則にもどづいて、与えられた数式を置換していくことにより、Mathematicaは解(や所望の結果)を得る。
ところで、「ファインマン物理学」で有名なR.P.ファインマンはカリフォルニア工科大学で1983年から1985年までの間、計算機科学の講義(ファインマン計算機科学)をしている。その頃の学生がスティーブン・ウルフラムである。
ファインマンは「科学とは何か」の中で、「数学とはパターンにすぎない」「数学とはパターンを探すことだ」と端的に短く書き表している。この言葉を思い起こしながら、(おそらくそんな言葉を聞いていただろう)彼の学生でもあったウルフラムが「パターンマッチングによる数式処理アプリケーション」を商品化し市場に広まらせたのだ、と考えてみると何だか「面白い繋がり」を感じる。そんな繋がりを思い浮かべながら、Mathematicaの20年を集めたスクラップブック を眺めてみると、きっと楽しいと思う。
I'm looking forward to the next 20 years and hope that you'll continue to follow Mathematica on this exciting journey.
-- Stephen Wolfram





