hirax.net::Keywords::「単純化」のブログ



1998-11-12[n年前へ]

無限音階を作ろう 

上昇し続けるって何ですか?

- 上昇し続けるって何ですか? -
(1998/11/12)

無限音階を作りたい

 無限音階というものがある。ド・レ・ミ・・・と音がどんどん高くなっていくように聞こえるのだが、いつまでたっても終わらず、ふと気づくとずっと前と同じような音の高さだというものである。Escherの無限階段の版画は有名だが、あれの音階版である。
 とにかく、無限音階を作ってみようというのが今回の目的である。参考までに、Eshcerのことに関しては藤原康司氏のWEBhttp://www.pluto.dti.ne.jp/~fwhd5468/に詳しい情報がある。 ちなみに、このような版画である。
Esherの無限上昇(下降)シリーズ
「上昇と下降」(左図、1960年作)

「滝」(右図、1961年作)

 本題をますます離れるが、飯沼 敏夫氏のWEBhttp://www2.gol.com/users/atoz/index.html は一見の価値がある。上の2枚の版画をQuickTimeVRで実感できる。素晴らしい。

無限音階の仕組み

 人間の聴力にはもちろん周波数特性がある。
ニコンの補聴器のWEBhttp://www.nikon.co.jp/main/jpn/society/hocyouki.htm
によれば20Hz-20kHzが通常聞こえる周波数の範囲であるという。例えば、CDのサンプリング周波数はが約40kHzであるのは、この20kHzの倍だからである。つまり、ナイキスト周波数による。
 もし、ある高さの「ド」の1オクターブ下、そのまた下、...それだけでなく、1オクターブ上、そのまた上...が一度になったら、人間の耳にはどう聞こえるだろうか。それは、やはり「ド」である。その時のスペクトルはこんな感じである。なお、横軸は2をベースにした変形の対数軸である。また、実際には「ド」ではない。
音の画像スペクトル(水色が人間の耳に聞こえる範囲)

それでは、そのような「レ」が鳴ったとしたら?もちろん、それも「レ」である。そのようにして、「ドレミファソラシド」とやるとどうだろう?最初の「ド」と最後の「ド」は全く同じになっている。しかし、人間の感覚としてはどんどん音の高さが上昇していくように感じる。これが無限音階の仕組みである。
 図で示すとこのようになる。なお、下の図中で水色は人間の耳に聞こえる周波数領域である。また、振幅はたんなる相対値である。

上昇していく音
最初の音
少し高くなった音
もっと高くなった音
もっと、もっと高くなった音
もっと、高くなると、元に戻っている
上昇し続けるように見えて、結局同じ所を回っているだけである。

作成した無限音階

 今回は12音の平均率音階を用いている。音階そのものについては「音階について考える」という別の話である。また、基本波形としては正弦波を用いている。20Hz以下の正弦波を基本波形として、その倍音を20kHz超まで均等に足しあわせたものをただ作っただけである。正弦波を用いたのは話を単純化するためである。
 ここに今回作成したMathematicaのNoteBookを置いておく。また、下が作成する途中のデータである。どこか間違っているような気もする。少し不安だ。
左図は基底となる周波数を示す。X軸が周波数、Y軸が何倍音かを示す。右図は平均率の音階。440HzのAから1オクターブ上のAまで。
作成した音声データの波形 (左が全波形、右はデータの最初の1000個)
 聞く際の注意だが、音声再生ソフトの設定を「自動繰り返し」にして欲しい。

 さて、これが作成した無限音階である。それっぽく聞こえるだろうか。

2000-01-31[n年前へ]

落ちゆくエレベーターの中…で悩みます? 

無重力の理想と現実(仮)


 今日もまた「ちゃろん日記(仮)」を読みに行くと、何とも面白い話があった。

である。この「ちゃろん日記(仮)」は「疑問とそこに隠れている真実を見つけだす感覚」に満ち溢れている、と私は思うのである。面白すぎである。さて、今回の話は、
 エンパイアステートビルでエレベーターが落ちたっていうけど、落ちていくエレベーターの中の人は
    1. 床に張り付く
    2. 天井に張り付く
    3. 宙に浮かぶ
    のどれなんスかね? わしはこれまで「床に張り付く」と思ってたっス。けど、本当は「宙に浮かぶ」らしいっスね。
という話である。

「ほんとう〜にそうか? ほんとう〜にそうか?」

 こういういかにも教科書に載っていそうな話には、時として落とし穴がある。教科書に書いてあるのは理想的で単純化した場合の結果である。それを鵜呑みにすると間違えてしまうことになる。極端に言えば、教科書に書いてあるような理想的な状態はほとんど存在しないので、教科書に書いてあるような現象はそうそう再現しない、ということになる。
 ピサの斜塔から「落下の実験」を行ったのはガリレオ・ガリレイであると思っていると間違いである、というのは少し違う例になってしまうか。

 久しぶりに思い出したが、私の所属していた研究室では重力測定は大きな柱であった。そして、確か大学院の入試問題の内の一題は、まさに

「落ちていくエレベーターの中の人達に働く力を精密に論ぜよ」
であった(簡単に大雑把に言えば)。私はちゃんとこの問題を解けた覚えがない。いや、はっきり言えばずいぶん悩んだ覚えしかない。ってことはいまいち解けなかったのだろう。なので、「落ちていくエレベーターの中の人達は無重力状態である」と聞くと、「ほんとう〜にそうか? ほんとう〜にそうか?」と歌いたくなる。

 研究室関連では、絶対重力測定を行う研究をする人達もいたわけである。絶対重力(加速度)測定は自由落下する物体の運動を測定して、重力加速度を測定するわけであるが、そう簡単に物体は自由落下してくれないのである。簡単な実験で物体を自由落下させて重力加速度を測定してみるとわかるが、大雑把な実験(自分の家ですぐできる程度の)では一桁ちょいの精度しか出ない。一桁ちょいの精度しかでないということは、(例えば)体重が10%弱程度になったように感じるかもしれないが、それは無重力ではない。体重が60kgの人であれば、6kgも感じてしまうのである。(雑な話だが。)

 空気中を落ちてくる雨だってそうだ。もし、雨が自由落下を続けていたらものすごいスピードになって、雨に打たれるのは命がけになってしまう。しかし、実際にはそんなことはない。空気抵抗で速度は飽和してしまい、自由落下状態ではないからである。

 さて、本題である。果たして、

「落ちていくエレベーターの中は無重力状態になるだろうか?」
エレベーターには空気抵抗やワイヤーを介して働く抵抗が働いている。すると、自由落下状態にはならない。当然、「エレベーターの中の人は無重力状態にはならない」だろう。

 例えば、

の中に、
 北海道の上砂川町にある施設(JAMIC)で、490m落下させることにより、10秒の無重量環境が得られます。落下中は空気抵抗を受けるので、落下カプセルを二重構造にし、空気抵抗を無視できるように工夫してあります。
と、記述されているように、実際には工夫をこらさなければ無重力状態は実現できないのである。絶対重力系などでも空気抵抗を無視するために、投げ上げて往復運動を測定するなどの工夫がいるのである。

 と、言葉だけで書いてもしょうがないので、適当な計算でもしてみる。いや、もちろん、実験をするのが良いわけであるが、面倒だし…

 まずはエレベーターには、

  1. 何の抵抗も働かない
  2. 空気抵抗とワイヤーの抵抗が働く
という二つの場合を考えてみる。空気抵抗などは速度の二乗に比例するとした。空気抵抗でもワイヤーの抵抗でもそれが自然だろう。また、エレベーターの重さ、抵抗の比例定数、etc.は適当に決めた。

 そして、エレベーターの中の人には空気抵抗は働かないとした。エレベーターの中の空気と人の速度差はほとんどないからである。また、エレベーターは人よりもはるかに重く、人の重さはエレベーターの運動に何の影響も及ぼさないと近似した。

 その計算の結果を以下に示す。これが落ちていくエレベーターの軌跡である。抵抗のない場合が(赤)で抵抗のある場合が(青)である。エレベーターが落ち始めてから30秒後までの軌跡である。

落ちていくエレベーターの軌跡
抵抗のない場合(赤)と抵抗のある場合(青)

 理想的な場合(赤)に比べて、抵抗のある場合(青)の落ち具合が鈍っているのがわかると思う。それでは、もっと時間が経った場合はどうだろうか?それを次に示す。エレベーターが落ち始めて300秒後までの軌跡である。つまり、五分間もこのエレベーターは落ち続けているのである。落ちた距離は理想的な場合で40kmの深さに達している。すごいエレベーターである。こんなに落ち続けていると、すでに重力加速度が一定とは言っていられなくなる。

落ちていくエレベーターの軌跡
抵抗のない場合(赤)と抵抗のある場合(青)

 ここまでくると、抵抗のない場合(赤)と抵抗のある場合(青)では全然違う軌跡になっている。抵抗のない場合(赤)では放物線そのものであるが、抵抗のある場合(青)では一定の速度になっている。

 それでは、エレベーターがこのような状態になった時の、エレベーターの中の人に働く加速度(と実際の加速度の差分)を示してみる。これを見れば、落ちていくエレベーターの中の人が無重力状態であるかどうかがわかる。まずは、300秒後までの変化を見てみる。

落ちていくエレベーターの中の人に働く重力加速度(と実際の加速度の差分)
抵抗のない場合(赤)と抵抗のある場合(青)

 理想的な場合(赤)はずっとゼロすなわち無重力状態であるが、抵抗のある場合(青)は無重力状態は最初だけで、50秒後位には通常の状態に戻ってしまっている。最初の部分をもう少し拡大してみる。次に示すのは、3秒後までの落ちていくエレベーターの中の人に働く重力加速度(と実際の加速度の差分)である。

落ちていくエレベーターの中の人に働く重力加速度(と実際の加速度の差分)
抵抗のない場合(赤)と抵抗のある場合(青)

 これを見ると、あっという間に人は無重力状態ではなくなっているのがわかると思う。

 というわけで、先の三つの選択肢、

  1. 床に張り付く
  2. 天井に張り付く
  3. 宙に浮かぶ
の中で、真実に一番近い答えはななゑ さんの最初の考えでもある「床に張り付く」であると思うのだ。日記の中の、
先日みたニュースのエレベーター落下実験の中で、中にいた男性リポーターが、落下しながら「ひぃ?」とアオ向けになった状態で床にハリ付いていたからなのです。
という実際の現象が正しいのである(いや、もちろん状況はかなり異なるが)。「頭の中だけ」で考えたことというのは大抵の場合間違ってしまう。(もちろん、今回の「できるかな?」の話もその例外ではない)
 そして、その後に、
ありはきっと、速度がそこまで充分でなかったのと、もしやのトキのために、男性リポーターに安全な姿勢をとらせていたタメだと思われます。
とあるが、実際問題として「速度がそこまで充分」になることは未来永劫ないわけである。だから、(私の中では)エレベーターの中の男性リポーター氏は床から浮かぶことはないのである。

 こういうのは、結局考える人の数だけ答えがあるのだと思う。もし、その内のどれが真実に一番近いかどうか知りたければ、実験すれば良いだけの話だし。

2003-03-23[n年前へ]

「湯冷め」を防ぐ「上がり湯」のヒミツ!? 

手の冷たい女は心が温かい?

 大学に入学してすぐの頃、京都のホテルで清掃・ベッドメイクのアルバイトをしていた。しかし、京都のホテルとは言っても、それは決して京都ホテルでもなければ、都ホテルでもなかった。まず、ホテルの駐車場の入り口には何故かビニールの「暖簾」がかかっており、京都にある割にはまるで白雪姫が眠っていそうなメルヘンチックな作りの建物で、そしてその値段設定も休憩一時間2980円~というまるでユニクロのようなディスカウント価格設定で、一泊二万五千円~というような京都の由緒あるホテルなどとはまるで別世界の「ホテル」だったのである。もう少し正確に言うならば、ワタシがバイトをしていたのは単に京都インター・チェインジ近くにあるホテルだったのである。つまり、結局のところワタシは京都I.C.のラブホテルで清掃のバイトをしていたのだった。

 そのバイトは「昼の一時から夜の一時まで」という十二時間労働で時給千円=トータル一万二千円ナリで、労働時間は決して短くはないけれど、単純作業で1日で一万円を超える収入は学生にはとても魅力的だった。だから、喜んで下宿から自転車で一時間程かけて京都I.C.のラブホテルまで行って、情けなくも自転車でホテル入り口のビニールの「暖簾」をくぐり、ホテルの中で十二時間ほど汗を流した後に(もちろん仕事に、だ)、帰りもまた自転車で一時間かかって下宿まで帰っていたのである。そして、ホテルへの客の入りが悪かったりした時には、そのホテルの空き部屋でシャワーを浴びて帰ったりもした。とはいっても、京都の夜は本当に底冷えするので、下宿に向かって自転車を一時間も漕いでいる間に湯冷めしてしまって、骨の芯まで(自転車でラブホテル街を出るときには何故か心までも)冷えてしまったりするのである。

 そんな湯冷めしそうな寒い日には、一緒に働いていた同僚のおばちゃん達から必ずと言って良いほど

「湯冷めしないように上がり湯をちゃんとしていきなさい」
と言われていたのである。上がり湯というものを知らない無知な私に、おばちゃん達は
「シャワーを浴びてお湯で体が温まったら、その後ちゃんと水を浴びなさい」
「体が冷えないように、最後に水を浴びなさい」
と言い続けたのである。しかし、中途半端に理屈っぽいワタシは「体を温めるのに、何で冷水を浴びなあかんねん(ホントは関西弁じゃないけど)」「冷水なんか浴びたら、ますます体が冷えるっつーねん」 と(心の中でコッソリ思いながら)、上がり湯を浴びずに「上がり湯するとホンマ体が冷えませんなぁ」とウソをつきながら、そのまま下宿まで自転車をこぎ続け、そして帰宅する頃にはいつもワタシは骨と心の芯まで湯冷めしていたのであった。そして、自転車を漕ぎながら、ガチガチ震えつつ時折は「もしかしたらおばちゃん達の言っていることはホントなのかもしれん…?」と考え込んでみたりしたのである。
 

 しかし、そんな「冷水なんか浴びたら、ますます体が冷えるっつーねん」 と毒づいていた頃のワタシは、無知だったので「もしかしたらおばちゃん達の言っていることはホントなのかもしれん…?」と考え込んでみたりしてもそれを確認することができなかった。しかし、その後、ワタシは大学で熱伝導方程式などを学び、卒業のために家政学の単位を稼がなければならなかったので、今ではおばちゃん達の「上がり湯をすれば湯冷めしない」説の真偽を科学的に計算できるようになったのである。そこで、今回は試しに、下のように指先を単純化して、「お風呂に入った後、冷えていく様子」を計算してみることにした。
 

 下の図は指先の断面で(そうは見えないかもしれないが)、(白 = 空気、黄色= 脂肪、橙 = 筋肉、灰色 = 骨)というようにモデル化されており、筋肉と脂肪の中は不図示の血管が通っている。そして、骨・筋肉・血管・脂肪の密度はそれぞれ1300,1150,1055,920 [kg/a]、比熱はそれぞれ2.1, 3.8, 3.8, 2.5[J/kg K]、熱伝導率はそれぞれ8.2, 1.6, 1.7,0.7 [W/m K]という物性値を持っている。そして、体内の熱移動は熱拡散と、血液の移動による直接熱移動によって行われるものとしてみて、指先の熱移動のシミュレーションをしてみることにしよう。。
 

(誰がなんと言おうと)モデル化された指先
白 = 空気
黄色 = 脂肪
橙 = 筋肉
灰色 = 骨

 さて、とりあえず風呂にゆっくり入って、体をホカホカ温めて(上の図の)指の骨の芯まで38℃位に温めたとしよう。そして、アマノジャクなワタシが「上がり湯」を浴びずに、その真っ赤にアッチッチになったホカホカ体のまま自転車に乗って、指先が周囲の京都の10℃の冷たい空気で冷えていくシミュレーションをしてみる。

 すると、例えば指の皮膚表面と骨の中心の温度の時間的な変化のシミュレーション結果は下のようなグラフになる。皮膚の表面の温度は冷たい風に冷やされて徐々に温度が下がり、計算終了時には指の皮膚表面の温度は35℃程度になっている。そして、それにつれて指の骨の中心の温度も下がっていく。最初は温度が38℃だった骨の芯も、計算終了時には36℃程度にまで下がってしまっている。そう、かつてのワタシのように京都の寒さに「湯冷め」してしまい、確かに体の芯まで冷えてしまっているのである。
 

皮膚表面と骨の中心の温度の時間的な変化
(上がり湯をしなかった場合)

 じゃぁ、素直におばちゃん達の言うことを聞いて上がり湯をしたらどうなるだろうか?まず、冷たい水(上がり湯)を浴びたならば体がビックリして血管が収縮してしまう。だから、血液の移動による直接熱移動の分を例えばゼロにしてしまうことにしよう。すると、「上がり湯」を浴びた場合の皮膚表面と骨の中心の温度の時間的な変化は下のグラフのようになる。
 

皮膚表面と骨の中心の温度の時間的な変化
(上がり湯をした場合)

 指先の血管が収縮して、指先の血行が悪くなっている分、どんどん指先の皮膚表面の温度は下がってしまっている。計算終了時には何と30℃程度まで下がってしまっている。上がり湯を浴びなかった場合より、よっぽど指先の温度は冷たいのである。これでは、かなり冷たそうで辛そうである。やっぱり、おばちゃん達の言っていることは間違っていて、かつてのワタシが「冷水なんか浴びたら、ますます体が冷えるっつーねん」 と考えたのが正しかったのだろうか?いや、決してそういうわけではないのである。何しろ、この上の図をよく見てみれば、指の骨の芯はまだまだホカホカの38℃であることが判る。何と、体の芯はまだ冷えていないのだ。
 

 そこで、もっと詳しく計算終了時の「指先の断面の温度分布」を眺めてみることにしよう。それが下の図である。
 
 

指先の断面の温度分布 (中心が骨、左右端が皮膚表面)
(アマノジャクに上がり湯を浴びなかった場合)
(素直に上がり湯を浴びた場合)

 アマノジャクに上がり湯を浴びなかった場合は、指先が一様に冷えてしまっているのに対し、素直に上がり湯を浴びた場合には皮膚表面の温度は下がってしまっているが、冷えているのは指の表面近くの脂肪の部分だけで、筋肉も含めた指の芯は以前ホカホカ・アッチッチのままなのである。脂肪は筋肉に対して熱を伝えにくいので、表面の脂肪部分が冷たくても、その内部はずっとアッチッチのままなのである。

 つまり、上がり湯を浴びた場合と浴びない場合では、

  • 上がり湯を浴びないと、(比較すれば)指先は暖かいけど指の芯は冷たい
  • 上がり湯を浴びると、(比較すれば)指先は冷たいけど指の芯は暖かい
という指先の温度と指の芯の温度の間で逆転現象が起きており、一見冷たそうに思える「上がり湯」を浴びることで、何と「湯上がりのポカポカ気分」がずっと長続きすることが判るのである。「冷水なんか浴びたら、ますます体が冷えるっつーねん」 と毒づいていたワタシはたんに無知なヤツだったのである。京都のおばちゃん達が繰り返しワタシに言って聞かせた(ワタシは言うことを結局聞かなかったわけであるが)、「湯冷め」を防ぐ「上がり湯」のヒミツはとても科学的にも当たり前のことだったのである。昔から伝わる知恵は(別におばちゃん達が古いというわけではない)、やはり正しいことが多いのである。昔から伝わる知恵や諺をバカにしてはイケナイのである。その「湯冷めを防ぐ上がり湯のヒミツ」を学んだのが、実はラブホテルのバイト帰りであったにしても、そんな知恵や諺をバカにしてはイケナイのである。
 

 ところで、昔から伝わる知恵や諺をバカにしてはイケナイと言えば、ワタシはふと思うのである。「手の冷たい女は心が温かい」という迷信と思われがちな諺だって、実はとても物理的に正しいことを言っているのでは無いだろうか?素直にこの「手の冷たい女は心が温かい」という文言を読んでみれば、これは「手(体の表面)の冷たい女は心(体の芯)が温かい」という人体内部の熱伝導現象を的確に表現した実験結果であったように読めるに違いないのである。血行不良で冷え性(といっても実は表面だけが冷えている)な女性、しかも男性と比較した場合には脂肪が多い(つまり断熱材を体に巻いているのと同じ)女性は、

  • 手の表面は冷たいけれども、実は体の芯(=心)は暖かいのだ
という実に科学的な現象を的確に表した言葉なのである(ウソ)。というわけで、真偽はともかく「手の冷たい女は心が温かい」という諺は科学的に100%正しいのだ、というトンデモ説を今回ワタシは提案してみたいのである。

 このトンデモ説を踏まえ、これから女性の手を握りながら「キミの手は冷たいね」「ということは心が温かいんだね」とロマンチックに話をするような時には、ぜひぜひココロの中で「(といっても、単にそれは熱移動の物理的な話なんだけどね)」と考えてみて頂きたい(あくまでココロの中で)、と思うのである。もちろん、そのココロの中の独り言が女性に読みとられた結果、アナタがその女性の冷たい手で叩かれたとしても、ワタシは一切関知しないつもりなのである。

2003-08-27[n年前へ]

文章中に読点(、)を多くうつ人は… 

私見ですが、文章中に読点(、)を多くうつ人は精神的におかしな人が多いと思います。そこで文体の癖を心理学的に解説しているサイトをご存じの方があればご教授願います。
という「はてな?」の質問。この質問者がどうしてそう考えるに至ったかがとても興味のあるところである。そして、質問者が自分自身をどう考えているかが知りたいところだ。

 ところで、WEBページで眺める文章を書く場合だと、どうしても読点や括弧を多く付けたくなる。低い解像度で不自然な輝度で眺める文字はどうしても読みづらいがために、私たちの脳はその文字を読むことに多くの労力を割かれることになる。そのため、そんなディスプレイ上の文字を読む私たちの理解力は低下せざるを得ない。だから、その低下分を補うために、句点や括弧をつけて文章の構造を単純化したくなるのである。
 

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こういう書き方をしてみると、スペクトルを示す「関数」ではあるが、見方によっては、スペクトルという「値」のようにも見えると思う。値のように見えることで、スペクトルを示す無名関数を引数として他の関数(命令)に渡すことへのアレルギーを低減してみようとしたのである。そして、(128 red[#] + 255 blue[#])& というようにあまり考えることなく直感的に無名関数を書くことができるようにすることで、その関数を使い捨てることへの違和感を減らそうとしてみた。さらに、こういった内容であれば、下手な名前をつけてしまうよりも、式そのままの方が内容・意味がわかりやすい、ということを実感してみようとしたのである。たとえば、(128 red[#] + 255 blue[#])& であれば、この式自体が「強度128の赤色と強度255の青色を足したスペクトル」という風に話しかけてくるように感じられ、下手に名前をつけてしまうよりは内容が見えることがわかると思う。

 こんな例題を作ることで、無名関数アレルギーが低減した、と言いたいところなのだけれど、関数を使い捨てることには、やはりまだ慣れることができそうにない。関数を引数として渡すことは自然に感じられるようになっても、無名関数に名前をつけて、再度その関数を呼んでみたい気持ちはなかなか止められそうにない。名前をつけるより、その関数の中身をそのまま書いた方がわかりやすいとわかっていても、単純な名前をつけてしまいたくなる欲望はなかなか止められそうにない。

 その理由を考えてみると、やはり、苦労をともなう「関数」を使い捨ての「無名」にしてしまう、ということに一因がある。そして、もう一つ、名前をつけることで、単純化して安心してしまいたくなる、ということがあるように思う。ほんの何文字かの関数であっても、その内容を自分の頭で考えるよりは、なにがしかの単純な言葉で表現された関数名を聞いて納得したくなることがあるように思う。

 「吾輩は猫である」の第一章の最後、つまり、当初の読み切り短編小説「吾輩は猫である」はこのように結ばれる。

 吾輩は御馳走も食わないから別段 肥りもしないが、まずまず健康でびっこにもならずにその日その日を暮している。鼠は決して取らない。おさんは未だに嫌いである。名前はまだつけてくれないが、欲をいっても際限がないから生涯この教師の家で無名の猫で終るつもりだ。
 「吾輩は猫である」を思い浮かべながら、無名関数について考えたせいか、それ以来、無名関数が「吾輩は~」と話しかけてくるような気がするようになった。無名関数を書くと、どこかで世界を眺めながら、「我が輩は青色と緑色を足した色である。名前はまだない」「名前はまだつけてくれないが、欲をいっても際限がないから生涯ここで無名で終るつもりだ」と無名関数が呟いているさまが目に浮かぶようになった。存在意義はあるけれど、無名のままの関数、そんなものを思い浮かべながら作ったのがSpectrum Color Conversion である。



■Powered by yagm.net