hash-tableとtree-mapの非一貫性

alist->tree-mapとtree-map->alistは組み込みだけど,alist->hash-tableとhash-table->alistはutil.listに入っている.
hash-tableとtree-mapは似てるようで(両方なのに)何かと一貫性がない.tree-map-mapがないとか(以前書いた).
hash-tableは決められた4タイプがあって,ユーザ定義クラスに対して拡張するにはobject-equal?とobject-hashメソッドを定義してequal?タイプのhash-tableを使う.
tree-mapは等価比較と大小比較の二つの関数を渡して生成する.object-equal?やobject-compareを使うわけではない.
この違いはどこから来るのか…