私の質問は、コンパイル時にいくつの要素を知らなくても、シーケンスからいくつかの要素を抽出するにはどうすればよいかということです。部分的な使用が思い浮かびましたが、シーケンスではなく要素を引き出すのに苦労していました。
以下のインターリーブによって生成されたシーケンスを実現したいと思いますが、有限数のマップ形式でコーディングする必要はありません。
(def s1 [[:000-00-0000 "TYPE 1" "JACKSON" "FRED"]
[:000-00-0001 "TYPE 2" "SIMPSON" "HOMER"]
[:000-00-0002 "TYPE 4" "SMITH" "SUSAN"]])
(interleave (map #(nth % 0 nil) s1)
(map #(nth % 2 nil) s1)
(map #(nth % 3 nil) s1))
(:000-00-0000 "JACKSON" "FRED"
:000-00-0001 "SIMPSON" "HOMER"
:000-00-0002 "SMITH" "SUSAN")
私が次のことをしたら
(def cols [0 2 3])
(defn f1
[s1 col]
(nth s1 col nil))
(map (partial f1 s1) cols)
私は得る
([:000-00-0000 "TYPE 1" "JACKSON" "FRED"]\
[:000-00-0002 "TYPE 4" "SMITH" "SUSAN"] nil)
なぜこれが起こっているのか知っていると思います。cols パラメータは、シーケンス内の要素セレクターではなく、シーケンス セレクターのように機能しています。各シーケンスからいくつかの要素を引き出したいと思います。各シーケンスから要素を引き出すにはどうすればよいですか?
ありがとうございました。