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]
[TrackBack URL]