[Gauche-devel-jp] hash-tableに対するpush!

Back to archive index

Shiro Kawai shiro****@lava*****
2014年 6月 16日 (月) 19:58:53 JST


なるほど。push!についてはfallbackが'()であるのは決まってるわけだから、
あとはrefのプロトコルとして「オプショナルなfallback引数をとる」って
決めておけばいいのか。そいつはいけそうだな。


From: "KOGURO, Naoki" <naoki****@kogur*****>
Subject: Re: [Gauche-devel-jp] hash-tableに対するpush!
Date: Mon, 16 Jun 2014 19:48:41 +0900

> refの第3引数はfallbackを指すことが多いので、push!の中では(ref place item '())を使うようにしてはどうでしょう?
> slot-refの場合に困ってしまいますが、(ref (obj <object>) (slot <symbol>) (fallback
> <null>))を定義しておけば、ad-hocだけど何とか凌げると思います。
> 
> 
> 2014年6月12日 21:02 Shiro Kawai <shiro****@lava*****>:
> 
>> 「push!はそういうもの」と定義してしまえば一貫性はありますね。
>> ただ、現状のGaucheの実装は例外ハンドラを設定するだけでもオーバヘッドがあるので、
>> push!の度にハンドラ設定が入るのはちょっと嫌かなあ
>>
>> 性能を考えるなら、「初期値が無ければ()を返す」ようなref、というgeneric function
>> (デフォルトではただrefを呼ぶ) を作っといてpush!はそれを使うって手も
>> 考えられます。ちょっと用途が狭すぎる感じですが。
>>
>> とはいえsparse-vectorなど、最初にpush!する前には値がないデータ構造、
>> というは他にもあるので、push!側で対応するというのが理にかなっているような
>> 気はしてきました。
>>
>> --shiro
>>
>>
>> From: Masatake YAMATO <yamat****@redha*****>
>> Subject: Re: [Gauche-devel-jp] hash-tableに対するpush!
>> Date: Thu, 12 Jun 2014 20:24:27 +0900 (JST)
>>
>> >> なるほど。
>> >>
>> >> push!は定義からして、対象となる場所の初期値が()であることを前提にしてます。
>> >> なので「初期値を別に与えないとならない場所」に使うのはドメインエラーとも言えます。
>> >
>> > ドメインエラーと言われていしまいましたが、push!を拡張するというのは的外
>> > れでしょうか。
>> >
>> > 前もってpush!が想定する例外を決めておき、push!可能なデータ側は「初期値
>> > が無い」ところをrefしたタイミングで例外を上げることにします。push!は、
>> > その例外がきたときだけ値を ( ) でつつんで set!します。この実現方法であ
>> > れば<hash-table>を含む初期値がない他のデータ型でもpush!でき、あたらしい
>> > データ型を覚えずに済みます。
>> >
>> > あるゆるpush!に例外をキャッチするための仕掛けを準備するステップが増える
>> > のでもしかしたら問題となるかもしれませんが、新しいことを覚えずに済むのは
>> > 魅力に思います。
>> >
>> > 大和
>>
>> _______________________________________________
>> Gauche-devel-jp mailing list
>> Gauch****@lists*****
>> http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp
>>
> 
> 
> 
> -- 
> KOGURO, Naoki
> naoki****@kogur*****




Gauche-devel-jp メーリングリストの案内
Back to archive index