2010-08-29 6 views
4

Pourquoi cela ne produit-il pas la sortie que j'attends?sortie inattendue pour la carte à l'intérieur de do

(defn test-fn [] 
    (do 
    (println "start") 
    (map #(println (+ % 1)) '(1 2 3)) 
    (println "done"))) 

Il produit

start 
done 

Alors que je me attends

start 
2 3 4 
done 
+0

J'espère que vous avez une bonne réponse dans le canal IRC :) Bonne chance pour apprendre Clojure! – Isaac

+0

Oui! Merci d'avoir répondu à ma question sur #clojure, Isaac .. – yayitswei

Répondre

7

map est paresseux, et do ne force pas. Si vous voulez forcer l'évaluation d'une séquence paresseuse, utilisez doall ou dorun.

(defn test-fn [] 
    (do 
    (println "start") 
    (dorun (map #(println (+ % 1)) '(1 2 3))) 
    (println "done"))) 
+0

parfait .. merci! – yayitswei

+0

ne fait pas (+% 1) c'est plus difficile à lire et plus lent alors (inc%) – nickik

Questions connexes