Hi, Section 4 of the Racket reference says this about `define-struct':
""" Like struct, except that the syntax for supplying a super-id is different, and a constructor-id that has a make- prefix on id is implicitly supplied via #:extra-constructor-name. This form is provided for backwards compatibility; struct is preferred.""" So it seems it is deprecated. About question 2, in general you don't want to expose the details of your structures. For example, when defining a queue like: (struct queue ([front #:mutable] [rear #:mutable])) you don't want users to set/get the fields directly; instead you probably want them to use the `enqueue'/`dequeue' functions, which maintain the abstraction invariants, assuring the queue is consistent no matter what the users do. In general, I believe it is better not to provide the setters (unless it really makes sense, of course). PS: Sorry for the duplicate Harry, I forgot to put users@racket-lang.org in CC in my original response. 2012/7/15 Harry Spier <vasishtha.sp...@gmail.com>: > 1) In section 8 of the Racket reference there is this example: > ------------------------------------------- > Examples: > (define-struct tree (val left right)) > >> (match (make-tree 0 (make-tree 1 #f #f) #f) > [(tree a (tree b _ _) _) (list a b)]) > > '(0 1) > ---------------------------------- > > but I wasn't able to find any reference in the documentation to a > constructor form make-struct-id . I'm assuming that in the above example > (match (make-tree 0 (make-tree 1 #f #f) #f) > is equivalent to > (match (tree 0 (tree 1 #f #f) #f) > > Is that correct? Is make-struct-id a deprecated form of the constructor > procedure struct-id? > > 2) In a module which contains a structure, lets call it "structure-a" I can > have the statement: > (provide (struct-out structure-a)) > which provides the constructor procedure and the getters and setters to > structure-a > but I can also have the statement > (provide structure-a) > which only provides the constructor function. > Are there any cases where you would want to have (provide structure-a) > rather than (provide (struct-out structure-a)) ? > > > Thanks, > Harry Spier > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > ____________________ Racket Users list: http://lists.racket-lang.org/users