【问题标题】:clojure destructure vector of vectors to return each vectorclojure 解构向量的向量以返回每个向量
【发布时间】:2012-10-08 09:50:03
【问题描述】:

我对 clojure 很陌生,语法很粗糙。我正在尝试解构向量的向量。

这是我使用的函数的输出: [[:b 2 3] [:b 3 7] [:b 9 8]]

但是,我想做的是像这样显示输出: [:b 2 3] [:b 3 7] [:b 9 8]

基本上,试图摆脱那些最外面的括号。这可能吗?任何帮助表示赞赏:)

【问题讨论】:

  • 您对返回向量向量的函数满意吗?当你说你希望它在没有最外面的括号的情况下显示时,你的意思是你想在没有最外面的括号的情况下将向量的向量“打印”到屏幕上吗?

标签: vector clojure


【解决方案1】:

如果你只想要指定的输出,你当然可以这样按摩:

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

成功了。至于解构,如果你有一个返回[[:b 2 3] [:b 3 7] [:b 9 8]]的函数f,你可以使用解构如下:

(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)。
  • (apply str (interpose s coll)) 只是(clojure.string/join s coll)
  • 无论我的 Clojure 代码多么紧凑,我总能找到一种(在这种情况下,稍微)更紧凑的方法! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多