2008/12/22 J. McConnell <jdo...@gmail.com>

> On Mon, Dec 22, 2008 at 10:23 AM, Piotr 'Qertoip' Włodarek
> <qert...@gmail.com> wrote:
> >
> > Being new to Clojure, to Lisp and to functional programming in
> > general, I have some trouble wraping my head around it.
> >
> > As the first exercice, I would like to print multiplication table of
> > specified order, like:
> > (print-multiplication-table 3)
> >  1  2  3
> >  2  4  6
> >  3  6  9
> >
> > I came that far:
> >
> > (defn multiplication-row [n k]
> >    (map (partial * k) (range 1 (inc n))))
> >
> > (defn multiplication-table [n]
> >    (map (partial multiplication-row n) (range 1 (inc n))))
> >
> > (println (multiplication-table 3))    ; => ((1 2 3) (2 4 6) (3 6 9))
> >
> > Now, how to pretty print this?
> >
> > This does not work - prints nothing - why?:
> > (defn pretty-print-row [row]
> >  (map print row))
>
> The problem is that you are using map in two different ways here. In
> the multiplication-row and multiplication-table functions you are
> using it correctly as a function that applies a given function to all
> of the values in a collection, returning the results in a new
> collection. In the pretty-printing function you do not care about the
> results like you did in the above two functions, you care about the
> side-effects. For this, you can use doseq:
>
> 1:1 user=> (defn multiplication-row [n k]
>   (map (partial * k) (range 1 (inc n))))
> #'user/multiplication-row
> 1:3 user=> (defn multiplication-table [n]
>   (map (partial multiplication-row n) (range 1 (inc n))))
> #'user/multiplication-table
> 1:5 user=> (defn pretty-print-row [row]
>  (doseq [v row] (print v \space)) (print \newline))
> #'user/pretty-print-row
> 1:7 user=> (defn print-multiplication-table [n]
>  (doseq [row (multiplication-table n)] (pretty-print-row row)))
> #'user/print-multiplication-table
> 1:9 user=> (print-multiplication-table 3)
> 1  2  3
> 2  4  6
> 3  6  9
> nil
> 1:10 user=> (print-multiplication-table 5)
> 1  2  3  4  5
> 2  4  6  8  10
> 3  6  9  12  15
> 4  8  12  16  20
> 5  10  15  20  25
> nil
>
> HTH,
>
> - J.
>

This is off topic from the original questions, but are the 1:#'s in your
REPL line numbers?
If so, what did you do to get those?   Also if those are line numbers how
come only odd
numbers are printed?  What does the '1:' stand for?   Thanks.


>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to