将单打和列表放入clojure中的列表

时间:2016-12-01 00:39:57

标签: clojure

是否有更优雅的方式让into使用单个项目和列表而不是以下(当然是残暴的)功能?

(defn into-1-or-more
  [this-list list-or-single]
  (into this-list (flatten (conj [] list-or-single))))

哪个可以处理:

(into-1-or-more [1 2 3 4] 5)
;[1 2 3 4 5]

或者:

(into-1-or-more [1 2 3 4] [5 6 7 8])
;[1 2 3 4 5 6 7 8]

我正在构建一个集合,使用into []来减少列表中函数的结果。但是,某些功能会返回单个项目,而其他功能会返回项目列表。像:

(reduce #(into [] (% data)) [func-return-item func-return-list func-return-either])

最好的解决方案是做以下事情吗?

(into [] (flatten (map #(% data) [func-return-item ...])

1 个答案:

答案 0 :(得分:3)

虽然知道你得到的返回类型会更加理想,但这里有一个简单的答案:

(flatten [ curr-list (mystery-fn) ] )

示例:

(flatten [[1 2 3] 9 ] )
;=> (1 2 3 9)
(flatten [[[1] 2 3] [4 5] 6 ] )
;=> (1 2 3 4 5 6)

如果你愿意,你可以把它包装成一个函数,但似乎没什么必要的。