That's a nifty little function. This just fixes the syntax:
(defn plot [f min max step]
(doseq [i (range min max step)]
(dotimes [_ (apply f [i])] (print "*"))
(println)))
But we can add features and tightens up the implementation a bit:
(defn plot [f & range-args]
(doseq [i (apply range range-args)]
(println (apply str (replicate (f i) "*")))))
This gets rid of the distracting _ and the extra 'println', and also
allows us to use the optional args for 'range':
(plot #(* % %) 8)
--Chouser