So the dotted style is a shortcut for (let ([a $B("name")]) (let ([b changes(a)]) (let ([c calmE(b 300)]) c))) which is another way to show the sequential nature of the data flow.
As a macro you can write: (define-syntax-rule (. var exp next) '(let ([,var ,exp]) next)) (. b (. a $B("name") changes(a)) calmE(b 300)) And that also looks similar. No idea if this is any help... -Everett On Thu, 2010-07-29 at 10:00 -0700, Joe Marshall wrote: > On Wed, Jul 28, 2010 at 3:27 PM, Shriram Krishnamurthi <s...@cs.brown.edu> > wrote: > > Quoting from our Flapjax paper (pg 12): > > This means that instead of > > > > var name = calmE(changes($B("name")), 300); > > > > developers can write > > > > var name = $B("name").changes().calmE(300); > > > > which is arguably more readable than standard functional notation, > > since the left-to-right order of operations corresponds to the > > direction of dataflow. > > > > ----- > > > > What I didn't admit there is that *I* prefer the dotted style for this > > kind of sequential pipeline. > > There are a couple of serious problems with the dotted style. First, > in most languages that use this notation, the `method name' (the token > immediately after the dot) is scoped within the class of the object. Methods > are generally *not* first-class objects. This means that you cannot write > something like: > deffun: callit (object, method) = > object.method() > > The second problem is that what is *really* happening is a function call, > but the first (or second, depending how you count) argument is for some > unexplained reason separated from the others and placed in a weird position. > For example, in this: > > var name = $B("name").changes().calmE(300); > > Is it immediately obvious to you that calmE takes *two* arguments? > Can you explain why the second argument isn't treated the same way? > > -- > ~jrm > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/dev _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev