我有一个向量矢量,我想在每个向量中打印元素
我尝试了pprint,但没有按要求工作
这是我要打印的向量的向量:
[["+" "+" "+" "#" "!" "-" "#" "#" "#" "-" "-" "-" "-"]
["!" "#" "+" "+" "+" "#" "+" "+" "+" "-" "#" "#" "-"]
["#" "#" "#" "#" "+" "#" "+" "#" "+" "#" "-" "#" "#"]
["+" "+" "+" "#" "+" "+" "+" "#" "+" "#" "-" "-" "-"]
["+" "#" "+" "#" "#" "#" "#" "+" "+" "-" "#" "#" "-"]
["+" "#" "+" "+" "+" "+" "+" "+" "#" "-" "-" "-" "-"]
["+" "#" "#" "#" "#" "#" "#" "#" "#" "#" "#" "#" "#"]
["+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "@"]]
这是我想要的输出:
+++#--###--#-
!#+++#+++-##-
####+#+#+#!##
+++#+++#+#!!!
+#+####++!##!
+#++++++#!!!!
+############
++++++++++++@
答案 0 :(得分:4)
您可以使用cl-format处理带有控制字符串的列表(在这种情况下为列表的列表):
(def input
[["+" "+" "+" "#" "!" "-" "#" "#" "#" "-" "-" "-" "-"]
["!" "#" "+" "+" "+" "#" "+" "+" "+" "-" "#" "#" "-"]
["#" "#" "#" "#" "+" "#" "+" "#" "+" "#" "-" "#" "#"]
["+" "+" "+" "#" "+" "+" "+" "#" "+" "#" "-" "-" "-"]
["+" "#" "+" "#" "#" "#" "#" "+" "+" "-" "#" "#" "-"]
["+" "#" "+" "+" "+" "+" "+" "+" "#" "-" "-" "-" "-"]
["+" "#" "#" "#" "#" "#" "#" "#" "#" "#" "#" "#" "#"]
["+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "@"]])
(use 'clojure.pprint)
(cl-format *out* "~{~{~a~}~%~}" input)
输出:
+++#!-###----
!#+++#+++-##-
####+#+#+#-##
+++#+++#+#---
+#+####++-##-
+#++++++#----
+############
++++++++++++@
说明:
~a
是任何类型的format参数。当包含在~{
和~}
中时,format参数将在列表上迭代。因此,当~{
和~}
两次包围时,~a
将应用于嵌套列表中的每个元素(字符)。最后一个~%
之前的~}
将输出换行符。
这样,您可以轻松地使用控制字符串更改输出。例如:
(cl-format *out* "~{~{(~a)~^ ~}~^~%~%~}" input)
(+) (+) (+) (#) (!) (-) (#) (#) (#) (-) (-) (-) (-)
(!) (#) (+) (+) (+) (#) (+) (+) (+) (-) (#) (#) (-)
(#) (#) (#) (#) (+) (#) (+) (#) (+) (#) (-) (#) (#)
(+) (+) (+) (#) (+) (+) (+) (#) (+) (#) (-) (-) (-)
(+) (#) (+) (#) (#) (#) (#) (+) (+) (-) (#) (#) (-)
(+) (#) (+) (+) (+) (+) (+) (+) (#) (-) (-) (-) (-)
(+) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#)
(+) (+) (+) (+) (+) (+) (+) (+) (+) (+) (+) (+) (@)
请注意,“ ~^
”是在列表用完时停止迭代的指令。因此,“ ~^<space>
”将取消每行最后一个元素之后的空格。而“ ~^~%~%
”将取消最后一行之后的双换行符。
答案 1 :(得分:2)
您不需要任何花哨的格式或副作用(尽管我很欣赏那些答案中的信息)。只需使用clojure.string/join
即可创建所需的字符串并以任何旧的方式打印即可。
> (join "\n" (map join input))
+++#!-###----
!#+++#+++-##-
####+#+#+#-##
+++#+++#+#---
+#+####++-##-
+#++++++#----
+############
++++++++++++@
例如
> (let [s (join "\n" (map join input))] (println s))
+++#!-###----
!#+++#+++-##-
####+#+#+#-##
+++#+++#+#---
+#+####++-##-
+#++++++#----
+############
++++++++++++@
nil
答案 2 :(得分:1)
我们可以使用run!遍历外部向量,并使用clojure.string/join将每个内部向量变成可打印的字符串。
假设向量定义为input
:
(require '[clojure.string :as str])
(run! (comp println str/join) input)