D.L.グッドスティーン&J.R.グッドスティーン『ファインマンの特別講義』

曇。
また午前3時くらいまで起きていて、昼ちかくに起きるという。あかんね。プログラミングがおもしろすぎるのがいけない。


Ruby関数型プログラミング(!)という謎の行為がおもしろすぎる。お勉強中。Lisp は楽しいのだが、残念なことに可読性だけがない。同じことを Ruby で書くと、関数型プログラミングの強力さと可読性が同居できる。さらに、Ruby 本来の機能とうまくミックスさせると、なかなか独特で楽しい世界が! しかしこういうことをやってると、Ruby はじつにいろいろなことがハイブリッドされた言語なのだということに気づかされる。Ruby にないのはパターンマッチくらいのものではないか。しかし笹田さんがちらりと書いておられたところでは、Ruby にパターンマッチを導入するという試みも考えられているらしい。確かに Ruby は「楽しい」「ユーザーフレンドリーな」言語なのだが、そればかり強調されているのは何か残念な気がする。Ruby は依然としてアバンギャルドでもあるのだ。

Ruby は「カリー化」は可能で、ある種の「遅延評価」も可能ではあるが、Haskell のような完全な遅延評価は不可能である。つまり Ruby では、例えば関数 f.call(a.call, b.call, c.call) のように引数が関数 a, b, c の呼び出しになっていて、a, b, c のそれぞれが遅延評価になっていてすべての値が揃ったら f を実行、というようなことができない。ただ、こういう遅延評価はデバッグがむずかしいらしいし、少なくとも Ruby には合わないという気がする。それよりも、関数 a, b, c の呼び出しが並列処理になっていて、自然と遅延評価同等のことが実現されるというのならおもしろいと思うのだが。自分は Go 言語を知らないのだが、Go の goroutine というのはこういうものなのだろうか? Ruby でも、例えば上では関数を call メソッドで呼ぶように書いてみたが、この call の実装次第で少なくとも文法的には可能だと思うのだが…。まあこれは初心者の思いつきにすぎないので、現実にどうなのかはよくわからない。

D.L.グッドスティーン&J.R.グッドスティーン『ファインマンの特別講義』読了。副題「惑星運動を語る」。ファインマンは20世紀を代表する大物理学者のひとりとして、一般にもよく知られている。大学での彼のユニークな講義は「ファインマン物理学」として世界中で読まれている。自分もすべてではないですが読みました。本書は彼のこれまで活字になっていない講義で、講義の録音と少ない資料から何とか復元されたものだ。中身は特別講義というべきもので、惑星の軌道が太陽をその焦点のひとつとする楕円であることを、初等的な幾何学で証明したものだ。ここでの「初等的」はやさしいという意味ではまったくなく、あまり多くの知識なしで語ろうというものであり、確かに予備知識は中学生レヴェルで足りるだろうが、解析などの強力な道具が使えないぶん、じつは相当にむずかしい内容である。じつはあまり気合を入れずに読んだ自分は、途中の速度図のあたりからよくわからなくなってきた。ファインマン自身も、ここのところは非常にむずかしかったと言っている。きちんと理解したければ、こういう態度ではダメだ。
 じつはニュートンの『プリンキピア』が幾何学で書かれていることはどれくらいの人が知っているのか自分は知らないが、あれはじつにむずかしいものである。円錐曲線の詳しい知識が必要だそうで、ファインマン自身もそこのところで理解できなくなったというような代物だ。それが、ニュートンとは別の仕方で、幾何学的に証明してみたいというモチベーションになった。かしこい人というのは凄いものだ。なお、以上の証明は解析的にやればさほどむずかしいものではなく、物理をやる理系の大学生なら理解しないといけないレヴェルである。理解の仕方というのはいろいろあるものだ。

ファインマンの特別講義――惑星運動を語る (岩波現代文庫)

ファインマンの特別講義――惑星運動を語る (岩波現代文庫)

なお、書き忘れたが、本書においてファインマンの講義を文字起こしした部分は本書の一部にすぎず、あとは別の人の様々な文章である。正直言って、ファインマンの講義そのもの(第4章)を読んだだけではほとんどの人がわかるまい。だから、読み方としては第3章の講義解説を読んで、あとはファインマンの講義そのものは軽く流せばよいと思う。ただ、そのライブ感はおもしろいが。優秀な人が注意深く読めば、第4章だって理解できないことはないだろうけれど。