Clojure解构嵌套向量以返回每个向量

4
我对Clojure非常陌生,语法有些复杂。我试图解构一个向量的向量。
这是我使用的函数的输出: [[:b 2 3] [:b 3 7] [:b 9 8]]
但是,我希望它的输出像这样显示: [:b 2 3] [:b 3 7] [:b 9 8]
基本上,我想要摆脱最外层的方括号。这可能吗?任何帮助都将不胜感激 :)

2
你对返回一个向量的向量的函数满意吗?当你说你想要它在没有最外层括号的情况下显示,你是指你想要将向量的向量“打印”到屏幕上而没有最外层括号吗? - ToBeReplaced
1个回答

3

如果你只想要指定的输出,你可以通过调整来实现:

(apply str (interpose " " [[:b 2 3] [:b 3 7] [:b 9 8]]))
;= "[:b 2 3] [:b 3 7] [:b 9 8]"

这样就可以解决问题。至于解构,如果你有一个函数f返回[[:b 2 3] [:b 3 7] [:b 9 8]],你可以如下使用解构:

(defn f []  ;; something presumably more complicated goes here
    [[:b 2 3] [:b 3 7] [:b 9 8]])

(let [[a b c] (f)]
    (println a b c))
; prints [:b 2 3] [:b 3 7] [:b 9 8]

太好了!非常感谢您的反馈。这确实起作用了。经过一些研究,我还发现我的问题根源是我在函数中使用了(conj)而不是(concat)。 - dvsoukup
2
(apply str (interpose s coll)) 就是 (clojure.string/join s coll) - amalloy
无论我写的Clojure代码多么紧凑,我总是发现有一种(在这种情况下,略微)更紧凑的方式来完成它! :-) - JohnJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接