> これって同じ計算を2度させないってことですよね。 > > @tarai = {} > def tarai( x, y, z ) > @tarai[[x, y, z]] ||= > if x <= y > then y > else tarai(tarai(x-1, y, z), > tarai(y-1, z, x), > tarai(z-1, x, y)) > end > end > > puts tarai(12, 6, 0) > > とすると Haskell より5倍速いけど、、、
そ、それをやってしまったら意味がないと思うですよ。 Ruby でその高速化 (メモ化って言うんでしたっけ) をやるときは、 無駄な計算をしているということにプログラマが気付いて、 適切なキーを設定してキャッシュしないといけません。 でもそれを考えなくても表現の違いとして処理系がよきにはからって くれるというところがポイントじゃないでしょうか。
もっとも関数型ならどんなコードでも最適化してくれるというわけでは 当然ないのでゴニョゴニョ、という話になるわけですが、 そのへんは賢い人達が鋭意研究中ってことで (^^;;
ツッコミに対してブツ切りに反応してみるテスト。
SICP 読書会なのに Scheme という語が出てこないのは……仕様です。
SICP は predicate だったのかー!
なんでみなさん vi を嫌うのでしょう。 日本語の IME だってモーダルじゃないですか。 Windows の IME なんて 3 個も 4 個もモードがあるじゃないですか。 Emacs だってバッファごとにキーバインドが違うじゃないですか。 それはいいのに vi の input/command というたった二つが 許されないだなんて差別ですッ! 人権蹂躙です! いやもう断固国連に抗議しちゃうね。
一流のスポーツ選手には
「スイッチング・ウィンバック」と
呼ばれる精神回復法がある!
選手が絶対的なピンチに追い込まれた時
それまでの試合経過にショックや失敗
恐怖をスイッチをひねるように心のスミに追いやって
闘志だけをひき出す方法である
そのときスポーツ選手は
心のスイッチを切りかえるため
それぞれの儀式を行う
「深呼吸をする」
「ユニホームや道具をかえる」
などである
ショックが強いほど特別な儀式が必要となるが………!
^L
vi ユーザのスイッチは!
な……なんだァ〜〜〜〜?
あいつはッ!
何をしているんだッ!?
ル、root 様が
あ、あんなキーを!
あんな遠いところにあるキーを!
ESCを押しちまったァ〜〜〜〜〜!
http://www.tug.org/applications/PSTricks/
LaTeX 文書の中で PostScript 命令で絵が描けるパッケージ。 おお、これは便利そうだー。
……あ! 美文書にも出てたっ! (敗北)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
「viには2つしかモードがない」という言い方はいいな。こんど使おう。国連は何もしてくれないと思うけど(笑)
Emacsとかだと編集コマンドを間違えたりすると勝手にヘンな文字列が挿入されたりするじゃないですか。
その点、viだと挿入コマンドを入れなければそういう心配はありませんしね。
「直前に挿入した文字列を繰り返し挿入する」とかできて便利なのになぁ。
挿入モードなど存在しない,ESC で終端する長い引数を持つコマンドが
あるだけだ,という話もあります.でも ex mode と visual mode があ
るからやっぱりモードは二つだったり.
# ex には open mode があるから三つか?
Emacs なら妙な文字列が挿入されるだけだけど,vi だと多段 undo がな
かったら回復不能なほど編集されることがあり得ます.使ってるのが
nvi-m17n で良かったと思うことがたまにある.... :-P
Haskell で tarai が速いのは、memoise してるからではなく、tarai が非正格な引数をもっていて、その計算が大いにさぼれるからです。tak 関数なら、ruby の方が断然速いはず。ううぅ。
非正格ってnon-strictの訳ですよね。この「non〜」っていう用語が不思議な気がします。非正格ならこのような最適化を必ずするのでか?
それともこれは最適化ではなく、非正格なら自動的にそういう計算の仕方をしてしまうのでしょうか。すいません、Haskell勉強します。