当我执行如下循环时,我有一个小代码,根本不想工作:
...
(defn my-function []
(println "Hi") ;this works
(for [i (range 10)] (println "Hello") ;this doesn't work!
)
)
...
我无法理解问题所在,循环内的所有代码似乎都被忽略了,而“Hi”打印没有问题
我通过GUI按钮事件调用'myfunction',如下所示:
...
(.append output-text (with-out-str (time (my-function))))
...
您认为问题可能存在于GUI或其他我错过的地方吗?有什么建议吗? 我知道我应该使用REPL来测试它,但它不适用于Netbeans ......:S
非常感谢你的帮助。
答案 0 :(得分:11)
for
宏是懒惰的,所以除非实际需要返回值,否则它不会调用你的函数。
请改用doseq
功能。它会强制评估你的代码,因此不是懒惰的。它具有与for
相同的“语法”,并允许您考虑副作用函数,例如println
。
答案 1 :(得分:3)
另一种方法是使用“dorun”,如果我没记错的话,当你产生副作用时(例如println),假装是假的。 该函数应如下所示:
(defn my-function[]
(println "Hi")
(dorun (for [i (range 10)] (println "Hello"))))