我一直在使用 Java 和 Perl 进行开发,但想学习一些新东西,所以我开始研究 clojure。我尝试的第一件事是河内塔谜题的解决方案,但我的漂亮打印功能出现了奇怪的行为。基本上,当我使用 'lein run' 运行它时,我的 for 循环永远不会进入,但当我从 repl 运行它时,它似乎工作正常。这是一个精简的示例:
(ns test-app.core
(:gen-class))
(defn for-print
"Print the same thing 3 times"
[ p-string ]
(println (str "Checkpoint: " p-string))
(for
[x [1 2 3]]
(printf "FOR: %s\n" p-string)
))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(for-print "Haldo wurld!"))
当我使用“lein run”运行它时,我只看到“检查点”println 的输出。如果我删除那条线,我根本就没有输出。但是,如果我运行 'lein repl' 然后键入 (-main) 它会按预期打印字符串 3 次:
test-app.core=> (-main)
Checkpoint: Haldo wurld!
(FOR: Haldo wurld!
FOR: Haldo wurld!
FOR: Haldo wurld!
nil nil nil)
test-app.core=>
这里发生了什么?我有一种感觉,我正在以错误的方式处理这个问题,试图利用我过去的 Perl/Java 心态来编写 clojure。将同一任务运行一定次数的惯用方式是什么?