Home > programming > SICP等

SICP等

SICPの読破は今年一年の目標の一つである。まあかなり挫折しそうだけれど。 何だこの問題2.6は。これほど短いソースコードを見てこれほど全く理解できない というのは久しぶりだ。ラムダ計算スゴス。

末尾再帰はgotoと等価だというのを学んだ時、10年くらい前にやったアセンブラの仕事を思い出した。 再帰ではなかったけど、関数の最後がcallの場合はjmpに置き換えられる というのをその時学んだ。アレと似てるじゃないか。

;; コレより、、
:func1
    ;; 処理
    call func2
    ret
:func2
    ;; 処理
    ;; 処理
    ret

;; コッチの方がスタック消費しなくていいじゃん
:func1
    ;; 処理
    jmp func2
    ret ;; 通らない
:func2
    ;; 処理
    ;; 処理
    ret ;; いきなりfunc1の呼び元まで戻る
;; まああくまで一例ってことで、、、

普通の構造化プログラミング的なフローに照らしあわせながら 他の人が書いたソースを見ていたら、 当然callが出てきそうな所にいきなりjmpが出てきて面くらった。 コードを書いた人は、 あのフローを見ながら、当然のようにこういう最適化をやっていたわけだ。

とか思ってたら、アセンブラで継続を書いてる人がいるよ

んなわけで、当たり前のことかもしれないけど、Schemeをやってると アセンブラっぽさを感じるというか、C言語なんかとは別の 進化を歩んだ言語なんだなと(つーかあんまり進化してないのか)と思う。

アセンブラ
 |
 +- Lisp
 | +- ...
 +- Pascal、C
   +- ...

Writeback:0

Comment Form

writeback message: Ready to post a comment.

TrackBack ping me at
http://www.mono-space.net/blog/programming/e060331_lang.trackback

Page Top