【发布时间】:2016-04-20 15:54:59
【问题描述】:
在 Clojure 中具有简单的功能
(defn command []
(loop []
(let [input (read-line)
string-tokens (string/split input #" ")
tokens (map keyword string-tokens)
cmd (first tokens)]
(cond
;; explain the commands
(= cmd :help)(do
(printf "Usage:\nsearch <term>\nquit\n")
(recur)
)
;; break the loop
(= cmd :quit) (printf "bye bye")
;; do something
(= cmd :search) (do
(printf "Searching for %s...\n" (rest string-tokens))
(recur))
;; handle unknown input
:else (do
(println "Huh?")
(recur))
)
))
)
当我使用println 将字符串发送到输出时,它工作正常,但是当我使用 'printf` 时,它看起来像字符串被保存在缓冲区中并在我通过选择 :quit 选项退出程序时打印出来。
我认为这与do 块和递归有关,但没有它我无法使用recur,因为我收到“只能从尾部位置重复”错误。
编辑:并不是我的程序不工作。我找到了解决问题的方法,首先使用format,然后使用println(例如(println (format "Searching for %s...\n" (rest string-tokens)))),但这样的行为对我来说很奇怪。
【问题讨论】: