It's better if we can support both. It's never one size fits all.

On Sun, Dec 20, 2009 at 11:49 AM, Sean Devlin <francoisdev...@gmail.com>wrote:

> Alex,
>
> I just thought of something.  I think we're all forgetting the amount
> of hacking done at the REPL.
>
> ;This is easy to type
> user=>(from (too (many (parens))))
>
> ;Uh-oh
> user=>to
>  too
>    many
>      nesting
>        levels?
>
> This might be an area where the parens are a win.
>
> Sean
>
> On Dec 20, 10:05 am, "Alex Osborne" <a...@meshy.org> wrote:
> > Martin Coxall <pseudo.m...@me.com> writes:
> > > I might try to knock up "optional parens inference for Clojure" and
> > > add in some manner of curly infix as an exercise. It doesn't look like
> > > it will be too hard. Since {} is taken for literal maps, I'd need
> > > something else for curly infix. [|...|], %...%, $...$?
> >
> > Let's just try a few example functions from contrib.
> >
> >   (defn subset?
> >     "Is set1 a subset of set2?"
> >     [set1 set2]
> >     (and (<= (count set1) (count set2))
> >          (every? set2 set1)))
> >
> > Drop the outer parens.
> >
> >   defn subset?
> >     "Is set1 a subset of set2?"
> >     [set1 set2]
> >     and (<= (count set1) (count set2))
> >         (every? set2 set1)
> >
> > Lets break after "and" so we can drop some more parens.
> >
> >   defn subset?
> >     "Is set1 a subset of set2?"
> >     [set1 set2]
> >     and
> >       <= (count set1) (count set2)
> >       every? set2 set1
> >
> > Now lets introduce infix with say, |...|.
> >
> >   defn subset?
> >     "Is set1 a subset of set2?"
> >     [set1 set2]
> >     and
> >       |(count set1) <= (count set2)|
> >       every? set2 set1
> >
> > Maybe they need spaces?
> >
> >   defn subset?
> >     "Is set1 a subset of set2?"
> >     [set1 set2]
> >     and
> >       | (count set1) <= (count set2) |
> >       every? set2 set1
> >
> > Has that suddenly made things more readable?  Maybe.  I don't know.  It
> > certainly felt really weird writing it.  That "and" by itself does
> > remind me of Haskell.  The code is definitely looking very tree-like
> > now, maybe that's a good thing?  My eyes *are* jumping to the "words"
> > easier and it's definitely less noisy.
> >
> > Yet, this no longer obviously looks like a list.  Is that bad?  I don't
> > know.  Do we need to be constantly reminded our code has a list
> > representation?  Does it make macros harder to think about?
> >
> > Lets try some more examples.  How about arity overloading?
> >
> >   defn reductions
> >     "Returns a lazy seq of the intermediate values of the reduction (as
> >      per reduce) of coll by f, starting with init."
> >     [f coll]
> >       if (seq coll)
> >         rec-seq self (cons (first coll) (map f self (rest coll)))
> >         cons (f) nil
> >     [f init coll]
> >       rec-seq self (cons init (map f self coll))
> >
> > Or a macro?
> >
> >   defmacro rec-seq
> >     "Similar to lazy-seq but binds the resulting seq to the supplied
> >      binding-name, allowing for recursive expressions."
> >     [binding-name & body]
> >     `let [s# (atom nil)]
> >        reset! s# (lazy-seq (let [~binding-name @s#] ~...@body))
> >
> > It becomes weirdly tempting to insert more line breaks just to get rid
> > of the rest of the parens.
> >
> >   defmacro rec-seq
> >     "Similar to lazy-seq but binds the resulting seq to the supplied
> >      binding-name, allowing for recursive expressions."
> >     [binding-name & body]
> >     `let [s# (atom nil)]
> >        reset! s#
> >               lazy-seq
> >                 let [~binding-name @s#] ~...@body
> >
> > Hmm.  Have we solved anything?  Will this just make the complaints go
> >
> > (from (too (many (parens))))
> >
> > to
> >   too
> >     many
> >       nesting
> >         levels?
>
> --
> 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<clojure%2bunsubscr...@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