randomly-fn reads the commands first (that's why you need a macro in the first place) so it prints 1 2 and 3 straight away. If you really need a function, use lambdas (as in #(print 1) #(print 2) #(print 3))
2012/5/2 金山 <si262...@gmail.com> > I defined a macro like this: > (defmacro randomly [& exprs] > (let [len (count exprs) > ind (rand-int len) > conditions (map #(list '= ind %) (range len))] > `(cond ~@(interleave conditions exprs)))) > > and then defined a function : > (defn randomly-fn [& exprs] > (randomly exprs)) > > I think there may be a mistake because of the randomly-fn didn't work > as expected. > > (randomly-fn (print 1) (print 2) (print 3)) > > expected: > 1 or 2 or 3. > but returned: > 123 > > where is the mistake? > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en