How about a define* that is exactly like let* without the additional indentation level? E.g.:
(define* [↑ "foo bar baz"] [↑ (substring ↑ 3 8)] [str (string-trim ↑)] [↑ (regexp-match? #rx"^[a-z].*[a-z]$" str)]) (and ↑ (string-append "*" str "*")) Laurent Le 31 mai 2012 19:04, "Neil Toronto" <neil.toro...@gmail.com> a écrit : > > On 05/30/2012 03:40 PM, Eli Barzilay wrote: >> >> Now, lets imagine that instead of a simple `<>' hole, there are two >> kinds of holes with an "up" or a "down" direction -- this leads to >> this kind of a syntax: >> >> (○ "foo bar baz" >> (substring ↑ 3 8) >> (string-trim ↑) >> (let ([str ↑]) ↓) >> (and (regexp-match? #rx"^[a-z].*[a-z]$" str) ↓) >> (string-append "*" str "*")) >> >> where you can read `↑' as "the above" and `↓' as "the below". > > > It seems like `↑' is another way to not name expressions (i.e. a "pointless style" :D), and `↓' is handled just fine by internal definitions. This is equivalent, currently defined, has less nesting, and avoids a rename: > > (define orig-str "foo bar baz") > (define sub (substring orig-str 3 8)) > (define str (string-trim sub)) > (define m (regexp-match? #rx"^[a-z].*[a-z]$" str)) > (and m (string-append "*" str "*")) > > A `define*' form like Jay (and I) want would make these kinds of things less error-prone and allow names to be reused: > > (define* ↑ "foo bar baz") > (define* ↑ (substring ↑ 3 8)) > (define* str (string-trim ↑)) > (define* ↑ (regexp-match? #rx"^[a-z].*[a-z]$" str)) > (and ↑ (string-append "*" str "*")) > > It's still pretty wordy, though. Even if I had `define*' I'd be tempted to go with my current favorite idiom, which trades wordiness for a nesting level: > > (let* ([↑ "foo bar baz"] > [↑ (substring ↑ 3 8)] > [str (string-trim ↑)] > [↑ (regexp-match? #rx"^[a-z].*[a-z]$" str)]) > (and ↑ (string-append "*" str "*"))) > > I occasionally get annoyed by how deeply these can get nested. I feel your pain, man. > > Neil ⊥ > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev
_________________________ Racket Developers list: http://lists.racket-lang.org/dev