[racket] Pattern matching and structures

From: José Lopes (jose.lopes at ist.utl.pt)
Date: Wed Nov 16 00:58:58 EST 2011

( Only now did I realize I wrote pattern patching in the subject instead 
of pattern matching.
Pattern patching... I have no idea what that is... )

On 16-11-2011 13:56, José Lopes wrote:
> Hello,
>
> Thank you for the quick reply. I am aware of the code replacement you 
> mentioned.
>
> However, what I really wanted was to preserve the name of the local 
> variable (e.g., brick) and find some other way to refer to the 
> structure (e.g., struct:brick).
>
> I prefer this naming convention because I refer to local variables 
> much more often than I refer to structures. Therefore, I think the 
> code is more readable if it is possible to preserve the names of local 
> variables that are instances of structures, and every now and then 
> refer to the structure with an alternate name to escape name shadowing.
>
> I was playing with omit-define-syntaxes and constructor-name.
> However, I didn't find a combination of structure parameters that 
> would help me do exactly what I have described.
>
> Is there a way to do it?
>
> Regards,
> José
>
> On quarta-feira, 16 de Novembro de 2011 13:41:35, Asumu Takikawa wrote:
>> On 2011-11-16 13:11:33 +0800, José Lopes wrote:
>>> (define-struct brick
>>>    (shape cs size))
>>>
>>> and the following function
>>>
>>> (define (right brick)
>>>    (match brick
>>>      ((struct struct:brick (shape cs size))
>>>       (make-brick shape (xy (- (x size) 1) (y size)) size))))
>>
>> The function argument binding "brick" is capturing the "brick"
>> identifier in the match pattern. If you rename the argument and use
>> "brick" instead of "struct:brick" here it should work.
>>
>> Cheers,
>> Asumu
>> _________________________________________________
>>    For list-related administrative tasks:
>>    http://lists.racket-lang.org/listinfo/users
>

-- 
José António Branquinho de Oliveira Lopes
58612 - MEIC-A
jose.lopes at ist.utl.pt



Posted on the users mailing list.