[Gauche-devel-jp] make-vectorの挙動に?

Zurück zum Archiv-Index

OGURISU Osamu oguri****@lagen*****
2004年 7月 19日 (月) 17:41:47 JST


小栗栖です。

Gauche-0.8のmake-vectorの挙動なんですが、0.7.3以前で
はちゃんと(?)

(make-vector 3 0.1) => #(0.1 0.1 0.1)

なっていたのが、

(make-vector 3 0.1) => #(#0=0.1 #0# #0#)
(make-vector 3 "abc") => #(#0="abc" #0# #0#)
(make-vector 3 (list 1 2)) => #(#0=(1 2) #0# #0#)

などとなります。さきにvectorを用意しておいて、
vector-fill! でfillしても同様な症状になります。オプ
ショナル引数に 0 や #\a #t などを渡すと、ちゃんとそ
れらでfillされたvectorが作られます。ちょっと調べてみ
たら、0.7.4からこの挙動になったようです。

Scm_MakeVectorのコードを見て気付いたのですが、もし
0.7.3のように

  (make-vector 3 (list 1 2)) => #((1 2) (1 2) (1 2)

となっても、ベクタの各要素は同じScmObj fillへのポイ
ンタになるので、それはそれで混乱しそうです。上のベク
トルの要素にset-cdr!を使ってみたら、ー斉に変更されて
しまいますし。

R5RSにはfillは違うオブジェクトを指すだとか、コピーを
作るだとかの規定はないみたいですね。

どう手をつけてよいか分らないので、報告だけです。。。
--
小栗栖 修 / OGURISU Osamu



Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index