Clojure 用数字和向量创建平面列表的更好方法

Clojure 用数字和向量创建平面列表的更好方法,clojure,Clojure,我有这样一个函数: (defn magic [a b c] (flatten (conj [] a b c))) 根据这些输入,我得到如下结果: (magic 1 2 3) => (1 2 3) (magic 1 [2 3] 4) => (1 2 3 4) 我的问题是,有没有更好的方法 问题可以概括为: 我不知道是否将数字或向量作为输入,但我需要返回一个单一的平面列表这可以稍微简化(和概括)为: 或者,正如评论中指出的,它可以进一步简化(因为上面的args已经是一个seq

我有这样一个函数:

(defn magic
  [a b c]
  (flatten (conj [] a b c)))
根据这些输入,我得到如下结果:

(magic 1 2 3) => (1 2 3)
(magic 1 [2 3] 4) => (1 2 3 4)
我的问题是,有没有更好的方法

问题可以概括为:


我不知道是否将数字或向量作为输入,但我需要返回一个单一的平面列表

这可以稍微简化(和概括)为:

或者,正如评论中指出的,它可以进一步简化(因为上面的
args
已经是一个seq):


除此之外,我认为这方面没有什么可以改进的。在您的实现中有什么特别困扰您的吗?

如果您可以获得seq/seq,那么您需要更加小心。并且必须递归地进入列表。此
树序列有一个clojure本机函数,请参见以下示例:

您可能想要这样的东西(未经测试):


只是我的经验不足——只是想知道我有没有什么明显的不对劲missing@PrasadChalasani因为我忽略了args已经是seq的事实。接得好:)
(defn magic [& args]
  (flatten (apply list args)))
(defn magic [& args]
  (flatten args))
(defn nonempty-seq [x]
  "returns x as a seq if it's a non-empty seq otherwise nil/false"
  (and (coll? x) (seq x)))

(tree-seq nonempty-seq seq expr)