[racket-dev] Code micro-level organization
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". The
> thing that makes me excited about this is how you can read this as the
> above [*] reading.
Maybe a simpler proposal is just a 'last' identifier that is always bound to the previous expression? I think having two arrows could get confusing. I'm not really a fan of the `let' expression binding `str' in the scope of all the expressions below it since they only occur in the `let' due to the down arrow.
But with "last" it would be:
(* "foo bar baz"
(substring last 3 8)
(string-trim last)
(let ([str last])
(* (string-append "*" str "*"))
(and (regexp-match ... str) last)))
Having expressions come from the bottom, using the down arrow, seems sort of wierd.