OGURISU Osamu
oguri****@lagen*****
2004年 11月 24日 (水) 16:16:21 JST
> わかりました。これは結構深い問題で、根本的に直すにはwrite-objectの > プロトコルを変えないとだめです。 素早い対応と解説をありがとうございます。そんな深いとは思い ませんでした。 array関係でもうひとつ気付いたのですが、<f64array>などの均 一配列はSRFI-25ではなくGaucheの拡張なんですよね。で、この 均一配列のshare-array を作ってみると、array-refで要素にア クセスできません。 (let1 a #,(<u8array> (0 3 0 3) 1 2 3 4 5 6 7 8 9) (let1 s (share-array a (shape 0 2 0 2) (lambda (x y) (values x y))) (array-ref s 0 0))) gosh> *** ERROR: vector required, but got #u8(1 2 3 4 5 6 7 8 9) share-arrayが<array>のインスタンスを返すからのようで、 share-arrayの定義内で (make <array> を (make (class-of array) に置き換えれば良いようです。 これに加えて2つ教えていただきたいことがあります。1つ目は array.scm内に定義されたcopy-objectのことで、これがexportさ れていないのはなぜでしょうか。 SRFI-25の主旨が``encouraging a declarative style of programming.''なのでSRFIのプロシージャでないことは納得した のですが、実際arrayを複製したいことはあるのでexportされて いると便利なんです。SRFI-25の範囲で効率的に複製する方法は ないみたいですし(ここを私は間違ってる?) # lapackのwrapperを作ったのですが、配列としてarrayの # backing-storageを渡しているのですが、これがlapackに書き # 変えられてしまうのでcopyを渡したいのです。 2つ目は純粋に質問で、SRFI-10に複素数のuvectorがないのはど うしてなんでしょう? 複素数自体がR5RSにあるのだから、 uvector もあっても良いと思ったのです。SRFIの議論も眺めてみ たんですが、該当する議論を見つけられなくて。もちろん、浮動 小数点数のuvectorから作ればいいので困りはしないんですが。 -- 小栗栖 修 / OGURISU Osamu