Hi, Philip. I had the same urge as David--I tried it out, glossing over any formal rules. Here's what I came up with: https://gist.github.com/leifp/ae37c3b6f1b497f13f1e
In truth, I think David's solution is more readable and maintainable. But I think "maintainability" is a pretty tricky concept: My code makes a seq of maps describing rows, and then turns them into strings at the end. This is probably more work to understand than David's solution. But is it less maintainable? Well, currently, the answer is "yes," but what if I need to output a diamond in several different formats? What if marketing wants each row to be a different color and font? I would start to favor my solution in that case. My point is that the difference between "maintainable" and "horrible" is evident, but the difference between "maintainable" and "easily maintainable" depends on predicting the future somewhat. I also favor a slightly less verbose style. A function is an abstraction, and you seem to be writing functions for very concrete steps. I think you have most of the correct abstractions for your solution method, you just need to consolidate the more concrete steps. Something like: flip-bottom-up -> flip (or vertical- and horizontal-flip) join-together-side-by-side -> beside put-one-on-top-of-the-other -> stack (or ontop, or ...) reverse-every-row -> (map reverse rows) ; very readable to clojure programmers (let [top-right (create-top-right-quadrant-for letter) right (stack top-right (flip top-right)) diamond (beside (map reverse (drop-first-col right)) right)] (display diamond)) The broad takeaway is: if I write a function I only use once, I usually just inline it. Unless of course I believe deep in my heart I'll have need of it somewhere else soon :). This is somewhat a matter of taste, and again, the requirements history usually determines what gets abstracted into functions, and history can be messy. :) Hope that helps, Leif On Saturday, December 6, 2014 5:48:02 AM UTC-5, Philip Schwarz wrote: > > Hello, > > can you please review my first solution to the diamond kata [1] and tear > it to bits: let me know all the ways in which YOU would improve the code. > > I am not so interested in a better algorithm for solving the kata. I am > learning Clojure and what I want to know is what YOU would do to make the > code more readable/understandable/maintainable, or just to make it follow > Clojure idioms and/or conventions that YOU find effective, or to follow a > coding style that YOU find more effective. > > Thanks, > > Philip > > [1] https://github.com/philipschwarz/diamond-problem-in-clojure > -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.