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

Reply via email to