我想打印出我的二叉树,但Clojure在正确打印序列方面使我很困扰。
所以,我有一个节点列表
在每次迭代中,我想打印出每个元素前后带有一定数量的空格的节点。
所以,我有一个节点列表
'(1 2 3)
。在每次迭代中,我想打印出每个元素前后带有一定数量的空格的节点。
(defn spaces [n]
(apply str (repeat n " ")))
很好,这看起来可行。
那么,假设我有一个节点列表'(:a :b :c)
,我想要将它们打印在一行上,并带有空格。
(println (map #(str (spaces before) % (spaces (dec before))) nodes))
我有一个项目清单。使用map函数我得到了一组字符串对象。非常好,我可以打印它们!
但这会给我这个:
(clojure.lang.LazySeq@d0b37c31 clojure.lang.LazySeq@105879a9 clojure.lang.LazySeq@8de18242)
于是我谷歌了一下如何打印惰性序列,然后我发现可以使用print-str
命令。根据文档,这将打印到一个字符串中并返回该字符串。
(println (print-str (map #(str (spaces before) % (spaces (dec before))) nodes)))
但这给了我这个:
(clojure.lang.LazySeq@d0b37c31 clojure.lang.LazySeq@105879a9 clojure.lang.LazySeq@8de18242)
没有改变... 嗯。非常感谢任何帮助。
str
函数似乎无法避免实现惰性序列:user> (str (map #(do (println %) (inc %)) (range 10)))
结果为0 1 2 3 4 5 6 7 8 9 "clojure.lang.LazySeq@c5d38b66"
- Oliver