我的问题是如何在编译时不知道有多少的情况下从序列中提取多个元素。想到了使用 partial,但我一直难以提取元素而不是序列。
我想实现下面交错生成的序列,但不需要以有限数量的映射形式进行编码。
(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 参数的作用类似于序列选择器,而不是序列中的元素选择器。我想从每个序列中提取几个元素。如何从每个序列中提取元素?
谢谢你。