[racket] match and equality
Hi all,
I have two questions regarding match. Hopefully both have an answer.
One of the things I would like to do in a match is to in the pattern
have a variable to stand for a given pattern and at the same time be
able to match on the structure of the variable.
For example, assume I want to match against a cons where the first
element is an a, and the second a list of b and c but I want to be
able to assign d to stand for the list of b and c.
Something like the following with some made up syntax:
(match (cons 1 (list 2 3))
   [(cons a (var d (list b c)))
    d])
> (2 3)
The second question is how to deal with two equal elements in a
pattern. For simple cases it seems I can do:
(match (cons 2 3)
  [(cons a a)
   'same]
  [(cons a b)
   'diff])
but what about if I want to use a specific equality predicate.
Something like (again with made up syntax):
(match (cons my-structure1 my-structure2)
  [(and (cons a a) (my-equal? a a))
   'same]
  [(cons a b)
   'diff])
Cheers,
-- 
PMatos