# [plt-scheme] when to use define-struct?

--- Bill Richter <richter at math.northwestern.edu>
wrote:
>* My question (very specific below) is when should we
*>* use define-struct?
*
When it is appropriate ;) (see below)
>* Any time we have a class of objects, say Widget, we
*>* can use
*>* define-struct to specify lists of widgets, by
*...
>*
*>* So my general question is: is this considered to be
*>* useful?
*
No. Why not? Because the data definition says
widgets are "a list of widget" so use a normal cons
list and you can use all the list functions defined on
lists.
>* Monomial =lists of integers n >= 0
*>*
*>* So (2 4 8) is a monomial. The empty list is the
*>* "identity element."
*>*
*>* I also define
*>* Polynomial = lists of monomials
*
Here I think structures would be useful. Why?
Because I don't think a monomial is actually a list of
numbers but rather you have chosen to represent a
monomial in such a way. You could represent it
another way, for example using a tree. If you define
structures to hold your data you can hide the
implementation details via modules:
(module monomial mzscheme
(provide m+ m-)
; Monomial = coefficients
; coefficients = list of number
(define-struct monomial coefficient)
(define (m+ m1 m2)
(append (monomial-coefficients m1)
(monomial-coefficients m2)))
...)
Now you can't mess up your types and you can
transparently switch to a more efficient
representation (e.g. an ordered tree) at a later date.
I'm sure the experts will have more insights to offer!
Noel
=====
Email: noelwelsh <at> yahoo <dot> com
Jabber: noelw <at> jabber <dot> org
__________________________________
Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs
http://hotjobs.sweepstakes.yahoo.com/careermakeover