Avoir une fonction simple en 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))
)
))
)
lorsque j'utilise println
pour envoyer une chaîne à la sortie, cela fonctionne bien, mais lorsque j'utilise 'printf`, il semble que la chaîne soit conservée dans le tampon et imprimée lorsque je quitte le programme en choisissant l'option :quit.
Je pense que cela a quelque chose à voir avec do
et la récursivité, mais sans cela, je ne peux pas utiliser le recur
car je reçois l'erreur "can only recur from tail position".
EDIT : Ce n'est pas que mon programme ne fonctionne pas. J'ai trouvé le moyen d'obvier au problème en utilisant d'abord format
et ensuite println
(ex. (println (format "Searching for %s...\n" (rest string-tokens)))
), mais un tel comportement me paraît bizarre.