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.cava...@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