[racket] syntax, differently
This is a price you are already paying in Typed Racket. I'd like to see more ways of putting types to work implemented.
Jay
Sent from my iPhone
On Aug 18, 2010, at 8:52 AM, Matthias Felleisen <matthias at ccs.neu.edu> wrote:
>
> Eduardo is providing a macro that helps you abbreviate complex
> selector and mutator chains. The BENFIT you get is that instead
> of writing
>
> (posn-x (bird-posn (sky-bird (world-sky some-world))))
>
> you can write -- in Racket --
>
> some-world.sky.bird.posn.x
>
> and make Racket programs look as short as C program selectors
> or Java dots or Javascript dots etc.
>
> The PRICE you pay is that you annotate variables and fields
> with struct information. That is, you have to say somewhere that
> some-world is a variable that always stands for a world struct.
> And the sky field in world has to come with information that it
> always is a sky-struct. And so on.
>
> ;; ---
>
> To make this available in Racket, you'd have to port his macros
> from R6RS Scheme to Racket. I suspect that this would be a minor
> task.
>
> ;; ---
>
> To make this available in the teaching languages, you'd have to
> export these macros in a way that makes sense for students. Or
> you keep it all private to yourself.
>
> ;; ---
>
> I assume that you understand the differences between the various
> operations. In Java,
>
> pos.draw
>
> comes with static knowledge about pos (an object of a certain type)
> and draw (a field of a certain type) that is exploited to make the
> notation short and safe. It isn't complete safe because of NULL,
> which doesn't exist in Racket or the teaching languages, but let's
> ignore that.
>
> In a language like Ruby,
>
> pos.draw
>
> just doesn't care, If pos has an draw field at run-time, good enough.
> Even if pos isn't a position but happens to have a draw field, just
> keep on computing.
>
> In Racket and the teaching languages, you are *forced* to write
> down what kind of struct you expect and what field you want:
>
> pos.check-it-is-a-posn-and-select-x-then
>
> This gives you safety a la Java (at run-time) and tells the reader
> at each site where you write down a selector expression what you
> expect. It's verbose but readable.
>
>
>
>
> On Aug 18, 2010, at 10:34 AM, Mathew Kurian wrote:
>
>>
>>
>> On Wed, Aug 18, 2010 at 2:41 AM, Eduardo Cavazos <wayo.cavazos at gmail.com> wrote:
>>
>> Mathew Kurian:
>>
>> However, in the case of universe/world teachpacks, where the use of
>> states is a vital component, a set of code can get very long,
>> especially if the program is very complex and contains multiple
>> structures (in some cases structures inside structures inside
>> structures) within the states.
>>
>> I agree with the critique of lengthy expressions involving nested records (structs).
>>
>> Here's how I deal with it:
>>
>> http://gist.github.com/364754
>>
>> The particular solution is for R6RS but PLT has the necessary mechanisms for it.
>>
>> Ed
>>
>> Hey Ed,
>>
>> If you have spare time, can you please explain by what you meant in that github website. All I saw was a comparison between C and Scheme.
>>
>> Thank you
>>
>> Mathew K.
>>
>>
>> _________________________________________________
>> For list-related administrative tasks:
>> http://lists.racket-lang.org/listinfo/users
>
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users