[racket] syntax, differently
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 <sk at 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
> <matthias at 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 <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
>>
>> _________________________________________________
>> For list-related administrative tasks:
>> http://lists.racket-lang.org/listinfo/users
>>
>
--
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://teammccarthy.org/jay
"The glory of God is Intelligence" - D&C 93