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