Gauche:HashTable

Gauche:HashTable

Shiro(2017/08/24 21:20:48 UTC): hash tableは仕様が乱立してて様子見だったんだけど、SRFI:125がR7RS largeに入ることになったんでどう合わせるか検討。ってことで0.9.5までのGaucheのAPIとの調整メモ。

方針

srfi-125 API

deprecatedされてないもののみ。

make-hash-table cmpr [arg ...]

Gaucheは(make-hash-table [cmpr-or-symbol]) なので上位互換。

hash-table cmpr [key value ...]

非互換。だけどこっちの仕様の方が使いやすいので、長期的には組み込みもこっちに合わせる。 とりあえずは次のとおり:

    • 従来のGauche版: hash-table-from-pairs
    • R7RS版: hash-table-r7として追加。
    • hash-tableはhash-table-from-pairsの別名。将来切り替える。
hash-table-unfold p f g seed cmpr arg ...

追加。

alist->hash-table alist cmpr arg ...

Gaucheは(alist->hash-table alist [cmpr])なので上位互換。

hash-table? obj

互換。

hash-table-contains? ht obj

追加。(hash-table-exists?の別名)

hash-table-empty? ht

互換。

hash-table=? value-cmpr ht1 ht2

追加。

hash-table-mutable? ht

要追加。

hash-table-ref ht key [failure [success]]

hash-table-ref-r7として追加。

hash-table-ref/default ht key default

追加。

hash-table-set! ht arg ...

要追加。(hash-table-put!を拡張)

hash-table-delete! ht key ...

keyを不定長にするのは簡単だが、Gauche組み込みと戻り値が違う (Gaucheはboolean、 srfi-125はinteger)なのでsrfi-125版はhash-table-delete!-r7として追加。

hash-table-intern! ht key failure

hash-table-intern!-r7として追加。 failureにthunkを取るのがGaucheの慣習と異なるので、-r7サフィックスをつける。

hash-table-update! ht key updater [failure [success]]

Gaucheのhash-table-update!とは、省略可能引数まで考えると非互換。 hash-table-update!-r7として追加。

hash-table-pop! ht

Gaucheのhash-table-pop!とは非互換。 hash-table-pop!-r7として追加。

hash-table-clear! ht

互換。

hash-table-size ht

追加。hash-table-num-entriesと同じ。

hash-table-keys ht

互換。

hash-table-values ht

互換。

hash-table-entries ht

追加。

hash-table-find proc ht failure

引数順がGaucheの慣習と異なるので、hash-table-find-r7として追加。

hash-table-count pred ht

引数順がGaucheの慣習と異なるので、hash-table-count-r7として追加。

hash-table-map proc cmpr ht

Gaucheのhash-table-mapとは非互換。 hash-table-map-r7として追加。

hash-table-for-each proc ht

引数順がGaucheのhash-table-for-eachと異なるので、 hash-table-for-each-r7として追加。

hash-table-map! proc ht

引数順がGaucheの慣習と異なるので、hash-table-map!-r7として追加。

hash-table-map->list proc ht

引数順がGaucheの慣習と異なるので、hash-table-map->list-r7として追加。

hash-table-fold proc seed hash-table

Gaucheのhash-table-foldとは引数順が異なる。 hash-table-fold-r7として追加。

hash-table-prune! proc ht

引数順がGaucheの慣習と異なるので、hash-table-prune!-r7として追加。

hash-table-copy ht [mutable?]

オプショナル引数を取るように拡張可。

hash-table-empty-copy ht

追加。

hash-table->alist ht

互換。

hash-table-union! ht1 ht2

追加。

hash-table-intersection! ht1 ht2

追加。

hash-table-difference! ht1 ht2

追加。

hash-table-xor! ht1 ht2

追加。

More ...