The Incanter example is confusing for the same reason that the Leiningen example from the blog post is confusing, and I don't think paren style matters at all. The functions have grown over time, they're now too big, and they need to be refactored into several smaller functions. The paren style is a red herring. core.clj is readable because its functions are short.
When your code makes you want to outdent, you can take this as a signal that your function has gotten too big and needs to be refactored. - Will Morgan On Aug 18, 4:36 pm, Greg <g...@kinostudios.com> wrote: > > Now the question you're asking is, why don't lispers write > > (MyFactory somearg > > ) > > which makes me cringe. > > That's not at all what's being suggested -- you'll find that both in the OP's > code and in the link below, there are many locations where closing > parenthesis are ended on the same line. > > Trailing parens are placed only for certain blocks that traditionally would > define a "scope" in another language, and this is convenient for many > reasons, including generic reasons not attached to any specific language. > It's not about carrying over "much loved C style" to Lisp, but to make actual > use of parenthesis for the purpose of clearly outlining the structure of your > code. > > Again, the link goes much more into depth on this. > > Attached is a screenshot of some code from the wonderful Incanter library. I > think it's a great illustration of how confusing stacking parenthesis can be > (there are many functions in there that are like this). > > The readability issue occurs when there's a drop in several indentation > levels after many lines. This is a problem regardless of what the > indentation width is, but is certainly made worse by a small indentation > width. > > - Greg > > Screen shot 2010-08-18 at 1.32.09 PM.png > 48KViewDownload > > > > On Aug 18, 2010, at 1:17 PM, Tim Daly wrote: > > > A more serious answer is that when I code in Java I use the > > brace-on-a-line kind of indentation. When I code in Lisp I > > never write single-line parens of any kind. > > > I find that I think differently in each language. > > > My Java code is always a pile of declare-this, do-this, do-this, return > > Thus I find that I'm delimiting the scope of my variables, marking my > > control flow and branching logic, try/catch logic, class boundaries, etc. > > > My Lisp code mixes control flow and data structures in the same syntax. > > Thus the idea that parens are some kind of control flow delimiter is > > not particularly meaningful. > > > To see the alternative case, take a Java program, find every function call > > such as: > > MyFactory(somearg); > > throw away the ';', and move the paren left to get: > > (MyFactory somearg) > > > Now the question you're asking is, why don't lispers write > > (MyFactory somearg > > ) > > which makes me cringe. > > > A second reason is that Lisp allows you to think things that Java > > does not. Java has this imperative, object-oriented, hierarchical > > style of writing. My lisp code sytle varies to fit the problem. > > Sometimes it is imperative, sometimes functional, sometimes OO, > > sometimes snobol-like pattern matching, sometimes class-based. > > Occasionally I dynamically construct the code and execute it inline. > > Or I use macros to create my own problem language and code in that. > > And I create my data structures "on the fly" inline to the code. > > > Once you really internalize lisp there are no real constraints > > on what you think or write. Thus there is no question of "bracing > > style" that is meaningful. > > > The whole idea of "bracing style" is Java-think. Your language > > choice has given you an OO-procedural mindset. So when you reach > > for Lisp you want to see what you have come to expect. People who > > work with bricks (Java) tend to wonder why they don't find bricks > > among people who work with modelling clay (Lisp). The answer isn't > > in the material, it is in your mindset. > > > Just by looking at lisp code I can tell what your native language > > is. Fortran programmers simulate COMMON blocks, C programmers use > > things as pointers, etc. "You can write Fortran in any language" > > is a famous quote but "you can't write Lisp in any language". And > > you can quote me on that. (But only in my obituary :-) ) > > > In fact, I think that this is going to be the hardest barrier > > to the adoption of Clojure. "Real Java Programmers" are not going > > to like the bracing style (or lack thereof) in Clojure. > > > Tim Daly > > > Greg wrote: > >> It's almost purely community convention that has been adopted from Lisp. > > >> You may be interested in this link: > > >>http://gregslepak.posterous.com/on-lisps-readability > > >> There is much discussion about this topic there. > > >> Cheers, > >> Greg > > >> On Aug 18, 2010, at 2:09 AM, michele wrote: > > >>> Wouldn't that make it easier to keep track of them. > > >>> Example: > > >>> (defn myfn-a [a b] > >>> (if (zero? b) > >>> a > >>> (recur > >>> (afn (bfn (...)) a) > >>> (dec b)))) > > >>> (defn myfn-b [a b] > >>> (if (zero? b) > >>> a > >>> (recur > >>> (afn (bfn (...)) a) > >>> (dec b) > >>> ) > >>> ) > >>> ) > > >>> -- > >>> 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 > > -- 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