On Nov 13, 2007 12:04 PM, David A. Wheeler <[EMAIL PROTECTED]> wrote:
> Sweet-expressions "version 0.1" has been out for a while, so now's a good 
> time to take "lessons learned" and see how it can be improved.
>
> Alan Manuel Gloria's comments have made me reconsider the role of (...) in 
> "sweet-expressions".  Current sweet-expressions use (...) much like other 
> non-s-expr languages, but as a result they introduce quiet incompatibilities 
> when reading s-expressions (if it looks like infix it's "read wrong").  
> Instead, using [] and {} have their advantages.
>
> I've looked around, and noticed that [...] is widely used (Python, Haskell, 
> math, etc.) to mean a "raw list".  In contrast, {...} is used many languages 
> (including C/C++/Java/C#) to mean a "new block", which CAN have infix 
> expressions.
>
> New idea: Perhaps unprefixed {...} should disable indenting (but retain infix 
> processing), [....] disables infix immediately inside it as well.  This means 
> that (...) can mean "process everything EXACTLY as an s-expression"... 
> meaning that a sweet-expression reader can replace the "traditional" reader, 
> and the (...) can "escape" down to the "old" reader.  Way better 
> compatibility with old readers this way.  Prefixed () would continue to mean 
> function call, with infix (potentially) inside.
Hmm.  Possible confusion between ()-as-s-expr versus
f()-as-swt-expr-function-call IMO.
Hehe, maybe something like:
#|Legacy code from days when we were still using s-expr|#
s-expr(
  (foo
         (bar foo)
         (quux
                 'quuux)))
Of course it does have the problem when a whole set of s-exprs need to
be embedded into a list structure that is represented mostly in
swt-expr.  Hmm.
Dunno why I keep giving solutions which are just "tell the reader
explicitly what type of expr I'm thinking of".

>
> When using it, most of the time you'd use prefixed function(...) to call 
> functions, {...} for infix processing, and [...] to give a "straight list" 
> when you want to make SURE it's not interpreted as infix.  One nifty result: 
> When you print out something as an s-expression, it's EASILY distinguished 
> from a sweet-expression.
>
> With that in mind, here are some examples:
>
> define factorial(n)
>    if {n <= 1}
>        1
>        n * factorial(n - 1)
> substring("Hello" {1 + 1} string-length("Hello"))
> define move-n-turn(angle)
>    tortoise-move(100)
>    tortoise-turn(angle)
> if {0 <= 5 <= 10}
>    display("True\n")
>    display("Uh oh\n")
> define int-products(x y)
>   if {x = y}
>     x
>     x * int-products({x + 1} y)
> int-products(3 5)
> 3 + 4
> {2 + 3 + {4 * 5} + 7.1}
> *(2 3 4 5)
>
>
> Obviously, there are pros and cons here.  Love to hear people's thoughts 
> about it.
>
> --- David A. Wheeler
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems?  Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >> http://get.splunk.com/
> _______________________________________________
> Readable-discuss mailing list
> Readable-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/readable-discuss
>

Reply via email to