I don't see why normal scope wouldn't take care of it. (: f (Posn -> Number)) (define (f a) (if (zero? (random 2)) a.x (let ([a.x 2]) a.x)))
Especially if this is done with an identifier macro because the second one won't even get called. Jay On Wed, Aug 18, 2010 at 1:06 PM, Shriram Krishnamurthi <s...@cs.brown.edu> wrote: > Not as long as "." is legal in the middle of an identifier: > >> (define a.b 3) >> a.b > 3 > > On Wed, Aug 18, 2010 at 12:09 PM, Matthias Felleisen > <matth...@ccs.neu.edu> wrote: >> >> Nice idea. I second that. >> >> >> On Aug 18, 2010, at 11:14 AM, Jay McCarthy wrote: >> >>> 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 <matth...@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.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 >> >> _________________________________________________ >> For list-related administrative tasks: >> http://lists.racket-lang.org/listinfo/users >> > -- Jay McCarthy <j...@cs.byu.edu> Assistant Professor / Brigham Young University http://teammccarthy.org/jay "The glory of God is Intelligence" - D&C 93 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users