I am not suggesting switching the whole Lisp syntax, just provide a
'sugar'
((foo bar) baz)  can written as (foo(bar) baz)

On Dec 27, 4:35 pm, Scott Jaderholm <jaderh...@gmail.com> wrote:
> Do you support this?
>
> classic: ((foo bar) baz)
> your syntax: foo(bar)(baz)
>
> Scott
>
> On Mon, Dec 26, 2011 at 1:09 PM, Louis Yu Lu <louisy...@gmail.com> wrote:
>
>
>
>
>
>
>
> > Recently, I found freedom of coding playing with Clojure with over 20
> > years’ experience on other program languages, Previously, I had
> > several trials of learning Lisp, but never got traction.
>
> > However there are two syntax notations always bother me, it feels
> > unnatural with my experience on other programming languages and math:
>
> > 1)      Prefix operator for math formula. Jeffrey Bester’s math library
> >https://github.com/jbester/cljext/blob/master/cljext/math.cljhas
> > brought in the infix notation and solved the problem;
> > 2)      The leading item of a list follows the parenthesis when it serves
> > as a function name, (f x) instead of f(x). I am fully aware of many
> > discussions on alternative syntax for Clojure and Lisp in the past,
> > one stream is here
> >http://groups.google.com/group/clojure/browse_thread/thread/319a1c77e...
> > My proposition is enhance Clojure to accept both (f x) and f(x), the
> > leading item can appear either after ‘(‘ as usual with classic Lisp
> > notion:
> > (println "Hello," "world!")
> > or with conventional function call notation:
> >        println("Hello," "world!")
> > The f(x) notation is just a syntax sugar, the only restriction is no
> > space between the leading item and '('.  If one or more spaces in
> > between, the item will be treated as a separate symbol. Either notion
> > or a mix of them can be used in the same program. Here are some
> > examples:
>
> > ; classic Lisp syntax notation
> > (defn pig-latin [word]
> >  (let [first-letter (first word)]
> >    (if (.contains "aeiou" (str first-letter))
> >      (str word "ay")
> >      (str (subs word 1) first-letter "ay"))))
> > (println (pig-latin "red"))
> > (println (pig-latin "orange"))
>
> > ; f(x) syntax notation
> > defn(pig-latin [word]
> >  let( [first-letter first(word)]
> >    if(.contains("aeiou", str(first-letter))
> >      str(word, "ay")
> >      str(subs(word, 1), first-letter, "ay"))))
> > println(pig-latin("red"))
> > println(pig-latin("orange"))
>
> > ; classic Lisp syntax notation
> > (defn fib [n]
> >   (if  (< n 2)
> >       1
> >      (+  (fib (dec n) )  (fib (- n 2)))))
> > (fib 36)
>
> > ; mix of two notations
> > defn(fib [n]
> >   if((< n 2)
> >       1
> >       (+ fib(dec(n))  fib((- n 2)))
> >   )
> > )
> > fib(36)
>
> > I have made minor changes (dozen lines) in one file (LispReader.java)
> > from Clojure source repository to implement this syntax sugar(code
> > posted athttps://github.com/louisyulu/clojure-fx). It works with well-
> > formed classic Clojure code and the proposed notation.
> > Running the test suite from Clojure distribution results two error:
> > One in the file compilation.clj line 90:
> > (recur y ^Long(rem x y)))))]
> > The problem is ^Long(… becomes function call, the fix is adding a
> > space in between
> > (recur y ^Long  (rem x y)))))]
>
> > The second is in the file sequences.clj line 1131:
> >        (is (=(partition-by #{\a \e \i \o \u} "abcdefghijklm")
> > The problem is (=(… , ‘=’ is associated with following ‘(‘, the
> > intention was the previous ‘(‘, the fix is also adding a space in
> > between
> >        (is (=  (partition-by #{\a \e \i \o \u} "abcdefghijklm")
>
> > These two cases are caused by the not well-formed Clojure code
> > (strictly speaking, each item in the list should be separated by a
> > space).
>
> > The proposed syntax sugar apparently pleases my eyes and fingers from
> > conventional languages. With some experiments, I found the code is
> > more readable for me to use f(x) notation for function call, and (op
> > x) for operator.
>
> > I like to hear from the community what kind of dark corner the
> > proposed syntax sugar may run into.
>
> > Thanks,
> > Louis
>
> > --
> > 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