打印字符串列表或向量

时间:2014-09-16 12:45:58

标签: clojure

如果我有一个字符串列表:

("String 1" "String 2" "String 3")

或字符串向量:

["String 1" "String 2" "String 3"]

穿过(map println)线程产生这个(对于列表):

(String 1 String 2 nil String 3 nil nil)

这适用于矢量:

(String 1 String 2 String 3 nil nil nil)

这里发生了什么?尼尔斯来自哪里?我怎么得到这个?:

String 1 String 2 String 3

(没有,没有括号,只是新行。)

2 个答案:

答案 0 :(得分:4)

每次致电nil时,println都会返回

(map println ["String 1" "String 2" "String 3"])

(nil nil nil)

打印字符串是一种副作用。

尝试

(dorun (map println ["String 1" "String 2" "String 3"]))

给出了

String 1
String 2
String 3
nil

如您所见,nil还会返回一个dorun

答案 1 :(得分:0)

如果你想要打印的东西

String 1
String 2
String 3

在REPL中,当提供输入["String 1" "String 2" "String 3"]时,不打印任何parens或nil结果:

user> (symbol (clojure.string/join \newline ["String 1" "String 2" "String 3"]))
String 1
String 2
String 3

这是一个愚蠢的Clojure技巧,具有边际效用。它可以准确输出您想要的内容,但如果您不想要返回值,为什么还要使用REPL呢?为什么不编写一个正确的-main函数来解析用户输入并准确输出你喜欢的内容?