clojure には、vector と list に対して異なる動作をする関数がいくつかあります。2 つの質問があります。
1) それは何のために良いですか? Clojure の作成者にはこれを行う十分な理由があると思いますが、私にはわかりません。
2)データがリストまたはベクトルにある場合でも同じように動作するこれらの関数のタイプセーフバリアントをどのように作成できますか?
定義されている関数 conj は、次の動作をします。
(conj [1 2 3] 4)
[1 2 3 4]
(conj '(1 2 3) 4)
(4 1 2 3)
次の動作を持つ関数 my-conj が必要です
(my-conj [1 2 3] 4)
[1 2 3 4]
(my-conj '(1 2 3) 4)
(1 2 3 4)
同じ動作をする他の関数 (cons、into、peek、pop) があるので、この構造がそれらすべてに簡単に適応できるとよいでしょう。