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)