ReadingGauche
APPEND なソレをどうまとめるか。そういえば append ってこんなのもナニ
gosh> (append '(1 2)) (1 2) gosh>
disasm したらこんなカンジ。
gosh> (disasm (lambda () (append '(1 2)))) main_code (name=#f, code=0x81f1ca0, size=4, const=1, stack=0): args: #f 0 CONST (1 2) 2 APPEND(1) ; (append '(1 2)) 3 RET #<undef> gosh>
ポイントとしては
- 末端の引数は val0 にセットされる
- 他の引数は (あれば) ケツから順に Scm_Append2 で末端側からナニ
- 引数ない場合、'() が val0 にセットされて終了
うーん
まとめがムズい。使用例は追加が必要かなぁ。下書きを以下に (順不同
- 引数が無い場合、空リストが val0 にセットされて終了
- 引数が一つだけの場合、その引数オブジェクトが戻される
こいつ達は使用例でナニした方が良さげ??
gosh> (append) () gosh> (disasm (lambda () (append))) main_code (name=#f, code=0x814a5a8, size=2, const=0, stack=0): args: #f 0 APPEND(0) ; (append) 1 RET #<undef> gosh> (append 1) 1 gosh> (disasm (lambda () (append 1))) main_code (name=#f, code=0x81f1c10, size=3, const=0, stack=0): args: #f 0 CONSTI(1) 1 APPEND(1) ; (append 1) 2 RET #<undef> gosh>
困った。でも Scm_Append2 なソレによればリストは新たに割り当てられるという事なのか。でも最後の引数はコピーにはならん、というのもナニ。あと最後の引数は set-cdr! されるというのも。
って set-cdr! されるのは最後の引数だけではないのか。