arton さんネタふりどうもです (^^;;; (ところで「ネタ」って「RHG のネタ」ということですか?) とりあえず参考 URL を再掲。
「引数 n を累積加算する関数を返す関数を書け」かあ。 Shiro さん紹介のページの例によると Ruby の例はこうらしい。
def foo (n) lambda {|i| n += i } end
……endを文の後ろに書くのはやめてほしいと思ったのはぼくだけですか? Lisp が好きなのはわかるけどなぁ、「郷に入れば郷に従え」という 言葉を知らないのかっ。あ、そりゃ知らないか (日本語使えないだろうからね)。
Ruby の Proc を Lisp と同じような意味での「関数」と言って いいのかどうかも考慮の余地がある。呼ぶときに call いるし。
というかそもそもこの問題はそもそも卑怯だよなあ。 Lisp がうまく当てはまる問題を出してるようにしか見えないんだけど。 (そういう反論の反論があるのも見たけど、それでもやっぱりそう思う。) なんで accumulator なのか全然理由が書いてないじゃん。
「 Succinctness is Power (簡潔さこそ力)」のほうも納得できねえ。 特に一番納得できないのは
苦労の合計 = 各行を読む苦労×行数
この等式には全く、全然、少しも、まるで、微塵も、小指の爪の先ほども、 納得できない。証明するにはおれが RHG 書いてる過程を見るだけでいいでしょ。 ある一行は一瞬眺めただけで通りすぎるけど、別の一行は一日かかることもある。 どんな言語で書こうと、どんなにうまく書いても、各行の難しさは絶対に 均一にならないね。
[ruby-talk:48813] RubyConference 2002 のアナウンス。 11/1 から三日間、シアトルでやるらしい。
ぼくは今年はどう見ても無理です。 そのころってちょうど某書の締切だし、なにより金がないです。 なんたっていまの全財産マイナス 6 万円ですから。
誰かシアトルに殴り込みをかける強者はいない?
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
工数計算みたいで大嫌い>各行を読む苦労×行数
「各行の難しさは絶対に 均一にならない」プログラム言語だけに関わらずですよね。(行で言うなら)それぞれに違った役割があるわけだし。
シアトルでも原稿は書けるし、お金はなんとでもできると思うよ。
実際去年はフロリダでRuby in a Nutshellのゲラ直してました。
まあ、flameを始めるつもりはないんですが、ちょっと誤解が
あるかなと思ったので。
- 例のページのrubyのコードを書いたのはPaul GrahamではなくてStephan Schmidtという方なんですが(ページの下方に書いてあります)、彼はLisperなのかな。RAAにプロジェクト登録しているみたいだけど。
- 例の式は半分ジョークで、冗長な言語の見掛けの易しさを皮肉っているだけだと思いますよ。だいいち「行」という単位にあまり意味が無いことは同文章中に書いてあるし。
"郷に入っては郷に従え" は、ラテン語で "cum fueris Romae, Romano vivito more, cum fueris alibi, vivito sicut ibi." (ローマにいるときはローマ人のように暮らせ、他の土地ではそこに住む人のやり方で暮らせ)、前半を英訳して "When in Rome, do as the Romans do." というのもあります。
単なるかけ算ではなく、Σで苦労の総和を求めていたら納得しますか?(笑)
リンク先を読んでみると「各行を読む苦労×行数」は、Basic言語に対してと読めますね。(読んでからツッコメよ)だったら、少し納得。
「苦労の総和」というのは、やはり行数とは比例しないと思われ(するかな?)
抽象度の高い記述の方が抽象度の低い記述の羅列よりも
意味をとりやすいという話はあるんじゃないかと.プロ
グラムの意味を考える時に逐一低レベルな操作を並べる
より,問題を記述した方がわかりやすいように.
そういう意味でプログラムの読みにくさは行数に比例し
ないどころか各行の読みにくさの総和ですらなく,もっ
と指数関数的だか幾何級数的だか,ずっとオーダーが大
きいのではないかっていう気がする.
# なんか同意にも反論にもなってない変なことを書いて
# いる気もする :-P