[racket] Some struct questions
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 at racket-lang.org in CC in my original response.
2012/7/15 Harry Spier <vasishtha.spier at 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
>