# [plt-scheme] Using student-defined structures in a teachpack

On 12/11/05, Mike Burns <mike at mike-burns.com> wrote:
>* I'd like to have a teachpack which allows the student to define her own
*>* Point struct such that the functions in the teachpack work with the
*>* student-defined Point. For example,
*>*
*>* Teachpack:
*>*
*>* (module a mzscheme
*>* (provide point->pair)
*>*
*>* (define (point->pair a-point)
*>* (cons (point-x a-point) (point-y a-point))))
*>*
*>* Definitions window (with the above teachpack loaded):
*>*
*>* (define-struct point [x y])
*>* (point->pair (make-point 1 2))
*>*
*>* Any tips on how such a teachpack could be written?
*
I'm a little unclear on your purpose here, and on how exactly you
expect this to work. As shown, obviously this won't work because
point-x and point-y are undefined in your teachpack. Is your
intention that point->pair will only work for a structure whose
definition is precisely "(define-struct point (x y))"? What if the
student names it Point, or the fields a and b, or has a third field z?
Should point->pair work for those structures, not work for those
structures, or would you expect a compile error?
To do any of this, you would have to redefine define-struct (or define
an alternate define-struct-like form). From a teaching standpoint,
this is all a very strange thing to do - requiring the student to
define the datatype, but providing operations on it. Why not either
write the functions for Posn, the provided point-like datatype, or
require the student to write them as well? In any event, changing the
relationship between structure definitions and the functions defined
on a datatype is more likely to confuse a student than anything else.
--Carl