Or match and define-match and define/match if you wish to avoid writing selectors.
On Nov 25, 2013, at 9:35 AM, "William J. Bowman" <[email protected]> wrote: > Ben, > > I'm not sure what problem you're actually trying to solve, but you may want > to look at > > 0) struct super-type > http://docs.racket-lang.org/reference/creatingmorestructs.html > 1) generic interfaces > http://docs.racket-lang.org/reference/struct-generics.html > 2) racket objects http://docs.racket-lang.org/reference/mzlib_class.html > > -- > > William J. Bowman > Sent from my tablet device > > > > -----Original Message----- > From: Ben Duan <[email protected]> > To: users <[email protected]> > Sent: Mon, 25 Nov 2013 9:25 AM > Subject: [racket] One accessor for the same fields of different structs? > > Hi All, > > If I have several structures, like the following: > > (struct customer (name age foo)) > (struct student (name age bar)) > > I choose the same representation for the `name` and `age` fields which are > `string?` and `natural-number/c`. So I think I could just define a `name` > accessor for both `customer-name` and `student-name` to save some typing. I > have to define the accesors by hand like: > > (define (name record) > (cond > ((customer? record) (customer-name record)) > ((student? record) (student-name record)))) > (define (age record) > (cond > ((customer? record) (customer-age record)) > ((student? record) (student-age record)))) > > 1. It's much repetitive work. Is there any built-in way to do these things? > I think macro can do these. But I'm trying to avoid macros as much as I > could, because I don't trust myself in designing macros. > > 2. Is it good or bad style to use one accessor for different structs? > > Thanks, > Ben > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

