mapcatをよりよく理解するために、例を挙げました。
user> (mapcat #(list % %) [1 2 3])
(1 1 2 2 3 3)
そして、意図的にmapとconcatを使用して、ドキュメントの説明を再現しようとしました:
user> (doc mapcat)
clojure.core/mapcat
([f & colls])
Returns the result of applying concat to the result of applying map
to f and colls. Thus function f should return a collection.
これを行うことにより:
user> (concat (map #(list % %) [1 2 3]))
((1 1) (2 2) (3 3))
ただし、ご覧のとおり、機能しません。ただし、次のように reduce を使用できますが、それが正しいかどうかはわかりません。
user> (reduce #(concat %1 %2) (map #(vec (list % %)) [1 2 3]))
(1 1 2 2 3 3)
上記は機能しますが、mapとconcatを使用してmapcatが行うことを再作成する正しい方法であるかどうかはわかりません。
基本的に、 mapcatが内部で動作することを理解したいと思います。
どうすればmapcatのソースにアクセスできますか? (私は Emacs + nrepl を使用しています)