Hatena::ブログ(Diary)

Ice Jotting

2016-03-29

20:35

(これは 2015/12/10 23:42 に書かれたものです)

想定される読者:プログラミングの記憶はないが、経験したことがあるはずのひと

末尾呼び出しって知ってる? 英語だとテイル・コール(tail call)なんだけど。

例えば「0からxまでの総和を返してくれる関数sum」を考えてみるじゃん。

C言語だと、

int sum(int x){
  int ret = 0;
  while(x>0){
    ret += x;
    x--;
  }
  return ret;
}
int main(){
  return sum(10);
}

こんな感じかな。Cとかは手続き型っていうんだけど、再帰っていう、自分自身が呼び出せる関数型の言語だと、

let rec sum1 x = if x < 0 then 0 else sum1 (x-1) + x

丁度こんな感じで書ける。これはOCaml

ただこれは再帰呼び出しになってなくて、次が再帰呼び出しになってる例。 sum1 x sum2 x 0 は同じ値が返ってくる。

let rec sum2 x i = if x < 0 else sum2 (x-1) (i+x)

何が違っているかっていうと、 else の後を見てほしいのだけど。 sum1 は、 sum1 (x-1) を実行したあとに、その値を使って x を足し込んで値を返さなきゃいけない。 sum2 は、呼び出した sum2 (x-1) (i+x) がそのまま sum2 の返す値になっている。自分自身を呼び出したあとに残っている仕事がなくて、再帰したあとの値がそのまま自分の返すべき値になっているというのが、末尾呼び出し。

これを最適化するのは結構簡単なんだけど、関数型言語においてはそれなりに強力なのです。演算が劇的に高速になる。

例えるなら、

家から大学に来て授業を受けたあと、塾でバイトをして、お店にごはんを食べに行き、家に帰って寝る

ということをしなきゃいけないとき、これを末尾呼び出し最適化しないままでは、

家から大学に来て授業を受けたあと、塾でバイトをして、お店にごはんを食べに行き、塾へ戻ってごはんを食べて来たと言って、大学に戻ってバイトをしてきたと言って、家に帰って寝る

ということをしている。仕事があるならもちろん戻らなきゃいけないんだけど(まだ塾で予習をしなきゃいけないとか、大学に荷物を置いて来たので取ってこなきゃいけないとか)、用もないのに戻るのはしんどいよね。

末尾呼び出し最適化をすると戻らなくて良くなる。つまり直帰ができるということ。

家から大学に来て授業を受けたあと、塾でバイトをして、お店にごはんを食べに行き、すぐさま家に帰って寝る

ということができる。それはなぜかというと、大学と塾を去るときに仕事を残してきていないことが分かっているから。

仕事を残して来てないかどうか判断して、ないなら直帰できることを覚えて行動するのが末尾呼び出し最適化なんだよねー、って先生が説明してて、超分かりやすくて面白かったのでした。えっ、それだけ? うん、それだけ。


想定される読者:末尾呼び出し最適化を知っている人

先生が末尾呼び出し最適化を家から大学に行って帰るのに例えてて面白かったんだけど。

「みなさん大学が終わったらアルバイトがあるのでと塾に行って仕事をし、腹が減ったなあとお店へ行ってごはんを食べたら、もう直帰したいですよね? そこからまた塾へ戻ってごはんを食べて来ましたと報告をして大学へ戻り、バイトしてきましたと言ってやっと家に帰ってベッドに入るなんてことはしませんよね。流石に仕事がまだ残っているときはレストランでごはんを食べた後に塾へ一度戻って仕事をしなきゃなりませんが、基本的には直帰したいという想いをみなさん持っているわけです。末尾呼び出し最適化をすると、みなさんはこの授業が終わったら塾でバイトをして、レストランで夜ごはんを食べ、そして家にすぐ帰って眠れるというわけです」

と、先生が末尾呼び出し最適化説明するとこうなったのですが。ユニークだよね。

2015-07-04

▲▽▲▽

03:19

シヲリは会話にぎこちなさを感じていた。テーブルの向こう側に座っているひとの顔がぐにゃぐにゃして見えるのだった。たあいのない話にへらへら笑い、自分もまた日常の話をするという、つまらないやり取りがたまらなく楽しかったのに、今は自分が何も話せないのを知っていた。シヲリは、飢えていた。自分が何かを理解していることを認識したかった。何かを説明できることは、その何かを理解していることをentailする。シヲリは何も語ることができなかった。何も自分は知らないのではないかと思った。マクドのサイズフリー百円で買える炭酸は砂糖水のくせに苦く感じた。歯車が噛み合わない、と思った。シヲリは狂っているのは会話の歯車ではなく自分自身の認知の歯車だということを知った。眼はうつろで、目薬を差してもさっぱり何も変わらなかった。それは目薬が200円もしないからではないと思う。シヲリの血液の循環がおかしいからだと思った。もっともっと、血液がごうごうナイル川のように流れてくれれば、私の思考もずっとずっとクリアになって、バイカル湖のように透き通るはずだと思った。ずっとずっと先を見通したいと思った。なのに身の回りをとりまく些細な一場面すら説明することができなかった。ストローは弾力が弱く噛み潰せば戻らなかった。いにゃいにゃと口にくわえている間に目の前に座っているひとは変顔をするのでシヲリはむかむかした。さっぱりおもしろいと思えない自分にむかむかしたのだった。

なんで最近変顔するの。

手持ち無沙汰だから。シヲリは何も話してくれないし。

全く以てその通りだ。シヲリは何も話してくれない。シヲリは自らに問いかける。シヲリは何を話すのか。何も話せないのは何故か。日常が空虚だからか。いいえ、日常は空虚どころかすべきことが目白押しでほとほと困り果てているほどだ。それでは考える余裕がないのかと自問した。いいえ、私は何も考えてすらいない。思考のリソースは有り余るべきだ。それなのに空きメモリは不足していて、ああ、それでは断片化しているのだろう、今日はゆっくりお風呂に入って眠りに就いてデフラグしよう、それがいいと提案された。そうだね。シヲリは瞬きを繰り返した。家に帰ったらアレルギー用の目薬を差そう。あれは1500円くらいしてとても高いのだ。きっとそれなら今の私にもよく効くだろう。そんな胡乱な思考をする自分を笑ってシヲリは眼を伏せるのだった。

2015-01-13

Ice Jotting

02:17

というなまえに恥じ入るほどに走り書きをしていない。

どうしてこのなまえにしたのか、もう明確には覚えていないけれど、思い出せるままにすこし'走り書き'をしたいと思う。

なまえ、には、強いこだわりを持つ。

持たない人なんているのだろうか。きっといるのだろう。それはきっと自分のことをなまえ以外で信じられる人か、自分を信じられない人のどちらかなんだろう。なまえなんていらない、と言えるひとをすこし羨ましいと思う。あまりに愛しく、名前を捨てることは四肢をもがれるようにつらいことだと、その人たちは決して思わないにちがいない。だって、要らないのだから。

私は何かに名前を付けるとき、とても長く考えるか、30秒で決めるかのどちらかしかない。言い換えると、30秒で決まらないようなら丸一日、丸二日、丸三日、延々うんうん唸り続けないと決まらない。それでも大抵の場合、一週間以内にはなんとか決まる。思考のほとんどを名付けることに費やし、心を砕いて選り分ける。かつて小説を書いていたころは登場人物の名前を付けるのに非常に苦労した。この話をモデルとなる人たちは読まないのだから、彼らの名前そのままに書いてしまおうかとすら思った。どうでもいい仮名を振って、時間切れとなり結局それが選ばれてしまったこともある。そういうとき、私は登場人物をあわれむ。かわいそうに、ごめんねと心を痛める。新しい名前を考えて自分の原稿の中だけでも直してあげればいいのかもしれない。でも、印刷されてしまった彼彼女の名前は、確かに仮名のまま半永久的に変わらない。

ブログの名前もお話の中の登場人物も自分の子供のように名前を付ける。Ice Jottingも、立ち上げてすぐ2時間くらいで決めたけれど、日付を指折り数えられる以上前から方針を決めていたから2時間で収まった。既にブログは一つ持っていたから、今度作るならメモ書きや走り書きにしたいと考えていた。タイトルも日本語じゃなくて、英語にしたかった。"Jotting"というのは、なかなか良いと思った。気に入ったけれど、その言葉に何をくっつけるかが問題だった。私の名前をくっつけた。あまり好きじゃなかった。Lazy Jotting*1、なんだか冗長だと思った。ブログの名前はともかく、他の作業をすることにした。はてダは、タイトルバーに表示するアイコンがカスタマイズできるらしい。カービィが好きだったから、画像フリーサイトでカービィアイコンをおいてあるところから気に入ったものを取って来た。アイスキャンディー。バニラバーにチョコレートがかかっている。ちょっとひんやりな、夏はもちろん、冬でも食べたいアイスキャンディー。Ice Jotting。くちの中で転がす甘いキャンディー。愛しさを感じた。

 

名前を付けるのは嫌いではない。その'もの'の方向性を定め、どのような言葉をあてはめれば彼に似合うだろうと頭を悩ます。抱きしめずにはいられないような、愛しい名前を作る。そのもののアイデンティティをあるいは決定付けるような大事なものを委ねられている責任感。期待に応えようという意欲。まるで大事な日に着ていく服を選ぶ高揚感に似ている。悩むのが楽しい。

自分が本を出すならどんな名前にしようかと考えたことがある。浮かんでくるアイディアを逐次姓名判断につっこみ、ああでもないこうでもないと試行錯誤する。通学時間中に自分の名前を考えるのはとてもうきうきして笑みがこぼれるほどだった。

そういえば先日、テレビで新宿二丁目の人たちの源氏名の由来について話していることがあった。彼ら彼女らの名前のセンスは本当に尊敬に値する。キャッチーで覚えやすい、親しみやすい名前。ショーで踊ったり芸を見せたりする人たちのコンセプトをはっきりと意識して各自「適当に」決めているのだと嘆息した。そこで登場していた人たちの名前も、また愛しい。

最近はとんと名前をつけることがなくなったような気がする。次に名前を考えられるのはいつなのだろう。とても待ち遠しい。

*1:既に作っていたブログ名に倣った。私と怠惰性は切っても切れない関係だから。

2014-10-24

03:10

好きな本の好きな一節というのを繰り返し思い出す。

好きな曲の好きな一節というのを繰り返し思い出す。

好きな人の好きな一面というのを繰り返し思い出す。

これらは似ている。


ほんの*1はなし

日に焦けて人々が海から帰って来るように、彼だけに聞かれる神秘の世界から日に焦けて戻って来るジャン・コクトーに、私が彼を愛しているとお伝え下さい。


 わたしはこの綵衣を纏い、この筋斗の戯を献じ、この太平を楽しんでいれば不足のない侏儒でございます。どうかわたしの願いをおかなえ下さいまし。

 どうか一粒の米すらない程、貧乏にして下さいますな。どうか又熊掌にさえ飽き足りる程、富裕にもして下さいますな。

 どうか採桑の農婦すら嫌うようにして下さいますな。どうか又後宮の麗人さえ愛するようにもして下さいますな。

 どうか菽麦すら弁ぜぬ程、愚昧にして下さいますな。どうか又雲気さえ察する程、聡明にもして下さいますな。

 とりわけどうか勇ましい英雄にして下さいますな。わたしは現に時とすると、攀じ難い峯の頂を窮め、越え難い海の浪を渡り――云わば不可能を可能にする夢を見ることがございます。そう云う夢を見ている時程、空恐しいことはございません。わたしは竜と闘うように、この夢と闘うのに苦しんで居ります。どうか英雄とならぬように――英雄の志を起さぬように力のないわたしをお守り下さいまし。

 わたしはこの春酒に酔い、この金鏤の歌を誦し、この好日を喜んでいれば不足のない侏儒でございます。



おかしなはなし
  • B'z「ビリビリ」

きみって まるごと罠のよう

わかると思うけど けっして僕は辛抱強い方じゃないよ


  • B'z「Happy Birthday」

空模様なんて気にもならない


光を弾いて 敷き詰めた雲は魚の群れのよう

ネオンサイン 道行く人たちを平等に照らす


全部パーフェクトだからどうかみてください。 http://j-lyric.net/artist/a001a09/l0002dc.html

目を覚ませば すべてがまぶしい

花の色も 街の声も 涙のわけさえも


随時更新します

*1:ささいな

2014-06-25

03:10

 携帯を開くと生まれたての胎盤が数十眠っている。これでも大分整理した方なのだ。新しい物語を孕みつつある子宮は、胎児と結び付く胎盤をぺたぺたくっつけて、胎児といえばそれっきり成長しないでもう妊娠何十ヶ月になるだろう。確かに産み落としたいと願った物語たちであるけれど、彼らは永遠に形成されないまま子宮の中で眠り続ける。私由来の卵子に、どこの誰が残していったものか分からない精子が受精して着床したはずなのに、産み落とされないなんて、望んで孕ませた(過去のある一点を生きた)わたしはきっと悲しむにちがいない。というのは、私の願望であるのかもしれない。

 子宮には愛しいあなたに宛てた行き場のない胚も眠っていたから、それは標本にした。未分化で青い感情を思いきって捨ててしまう人もいるだろう、でも、わたしが愛しいあなたとしたあなたは、私の思うところの愛しいあなたとは一致しないけれど、私がかつてあなたを愛したことは否定しない、だって私は生きとし生けるものを愛しているから、あなたの罪も、あなたの笑みも、まるまる受け入れているから、わたしがどんなに傷付いていたって私は構わない。とても愛しいあの人を愛しいと思えるのはそのおかげなのだから。半透明に透き通った標本を眺めてそんなことを思う。

 わたしは産みの苦しみを味わい、私は産めない苦しみを味わっている。いいえ、それは正しくない。産めない苦しみは前者に比べれば大したことはない。私は何者にも強いられず電子機器に子を宿し、しかるべき場に分娩した。次から次へと節操なく。いま思い返してみて、どうしてあのように子をなすことができたのだろうかというと、昼は学校に行き、夜は塾を経由して(あるいは経由せず)まっすぐに帰途につく例外のない隙のない生活に制限されたわたしは手に入れがたく、さまざまな精子があの手この手で接触を図ったから結果としてそのようになっているのだろう。私はその後のことをよく知らないが、彼らのことだから元気に息衝いてくれているに違いない。子宮にあって育てた子たちのことを、私は忘れない。この世から失われてしまっても、彼らは私の中で生き続け、やがて新しい生を受けるのだろう。私の命がある限り、彼らの輪廻転生は続く。

 いとしい私の子、今日のところはゆっくりおやすみ。