在我的Clojure循环中没有发生任何事情

时间:2012-04-02 20:00:24

标签: loops clojure for-loop

当我执行如下循环时,我有一个小代码,根本不想工作:

...

    (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

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:11)

for宏是懒惰的,所以除非实际需要返回值,否则它不会调用你的函数。

请改用doseq功能。它会强制评估你的代码,因此不是懒惰的。它具有与for相同的“语法”,并允许您考虑副作用函数,例如println

答案 1 :(得分:3)

另一种方法是使用“dorun”,如果我没记错的话,当你产生副作用时(例如println),假装是假的。 该函数应如下所示:

(defn my-function[]
  (println "Hi")
  (dorun (for [i (range 10)] (println "Hello"))))