Powered by MyWiki.jp

SICP 読書座談会 - 2008-02-08


第 0002 回

参加者

内容

  • 糸柳がきちんと連絡しなかったため、殆どの人間が来なかった。
  • 糸柳「俺は悪くない、全部あいつらのせいだ」
  • 端末を持ってきていないため不参加だった戀塚が途中で見に来て「おお」「なるほど」と 32 回ぐらい言って帰った。
  • 糸柳がみんなで食べるためにポテチを買ってきて、誰にも食べさせず一人で食べ尽くした。

なんか原因特定

  • 荒木が Goache の disasm を使い、前回糸柳の頭部が爆発した原因を特定した。

前回の糸柳のコード

(define (square x) (* x x))

(define (unko a b c)
  (define bigger
    (if (> a b) a b))
  (define biggest
    (if (> bigger c) bigger c))
  (+ (square bigger) (square biggest)))

disasm

main_code (name=unko, code=00BABF80, size=31, const=3, stack=16):
args: #f
     0 LOCAL-ENV-CLOSURES(2) () ; (letrec ((biggest (if (> bigger c) bigge ...
     2 LREF0-PUSH               ; bigger
     3 LREF10                   ; c
     4 BNGT 9                   ; (> bigger c)
     6 LREF0                    ; bigger
     7 JUMP 10
     9 LREF10                   ; c
    10 LSET(0,1) 
    11 LREF12-PUSH              ; a
    12 LREF11                   ; b
    13 BNGT 18                  ; (> a b)
    15 LREF12                   ; a
    16 JUMP 19
    18 LREF11                   ; b
    19 LSET(0,0) 
    20 PRE-CALL(1) 24
    22 LREF0-PUSH-GREF-CALL(1) #; (square bigger)
    24 PUSH-PRE-CALL(1) 29
    26 LREF1-PUSH               ; biggest
    27 GREF-CALL(1) #; (square biggest)
    29 NUMADD2                  ; (+ (square bigger) (square biggest))
    30 RET
  • 後に書いているはずの (define biggest (if (> bigger c) bigger c)) が先に評価されているっぽいので (define biggest (if (> bigger c) bigger c)) と順序を入れ替えたら動いた。
  • define ってそのスコープの中で後に書いた方が先に評価されるの?
  • さっぱりわからない。

Scheme の GC

  • Copying 使ってんじゃない?
  • 知らんわ
  • Goache のソースでも読めや

お名前:
コメント


上の画像に表示されている文字を入力してください


トラックバック
[TrackBack URL]