This is easily doable with a teachpack: 

1. how to create a teachpack
http://docs.racket-lang.org/htdp/index.html?q=teachpack

2. the key is to document the (a) structure type definition and (b) the data 
definition you export. 

Example: 

#lang racket 

(provide 
   ;; A DR is (make-dating-record String String Number Boolean String) 
   ;; interpretation: (make-dating-record f l dob b c) denotes a person with 
   ;; first name f, last name l, date of birth dob, gender b (true for female, 
false for male)
   ;; and a comment string c 

   ; DR -> String  
   ; extract first name from dr
   dating-record-first-name 
   
   ; DR -> String  
   ; extract last name from dr
   dating-record-last-name

   ; DR -> Number 
   ; extract dob from dr
   dating-record-dob 

   ; DR -> Boolean 
   ; extract sex from dr
   dating-record-sex 

   ; DR -> String  
   ; extract comment from dr
   dating-record-preference 

   ;; [List-of DR]
   the-dating-db 
   )

;; --------------------------------------------------------------------
;; IMPLEMENTATION 
...



On Nov 17, 2013, at 2:24 PM, john_burnette wrote:

> I hope this in the spirit of the question.  My students are working with 
> structures, a list of several hundred randomly created members of a dating 
> database.  They are happily working to test whether members of the database 
> not only share common interests, but are also satisfying what the member is 
> looking for in a dating match. 
> 
> It's a nice review exercise because they're doing a lot of list processing, 
> automatically generating letters to members telling them the good news that 
> they have matches, well lots of fun stuff like that.
> 
> Currently I have them just cut and paste in the database file I give them, 
> but I do thing it would be more realistic if they accessed it with a 
> "require".  It's working ok without doing this, but I'm thinking of taking 
> that next step - offloading not just the database but the structure 
> definitions as well.
> 
> So having said that I guess I'm obligated to give a reason why. I think doing 
> so really drives home the point about data driven design. Far too many of my 
> students have taken it upon themselves to rewrite the structures and of 
> course as long as they were generating their own examples of "clients" 
> everything worked fine. When they are given the larger database to work with 
> (using the data structures they should have been using) this fall apart.
> 
> Now, yes, I know, if they were carefully following the design recipe is a non 
> issue, and perhaps this serves as a good lesson.  Still, putting them in a 
> place which forces them to use the data structures as written would probably 
> be a good thing. 
> 
> 
> 
> Sent from my Verizon Wireless 4G LTE Smartphone
> 
> 
> 
> -------- Original message --------
> From: Norman Ramsey <[email protected]> 
> Date: 11/17/2013 1:27 PM (GMT-05:00) 
> To: [email protected] 
> Cc: Racket mailing list <[email protected]> 
> Subject: [plt-edu-talk] Using separate files as modules with HtDP 
> 
> 
> [Shifting to plt-edu-talk]
> 
> > > At Sat, 16 Nov 2013 12:44:03 -0500, Norman Ramsey wrote:
> >
> > >> On their next assignment, my students will reuse code they have built
> > >> for binary search trees.  I would prefer that they place the old code in
> > >> a different source file than the new code.  I tried doing this using
> > >> "require", but I cannot figure out how to get "require" to load a file
> > >> that is written in Intermediate Student Language. Is there another
> > >> mechanism I should try?  Is the thing I want to do even possible?
> 
> Matthias Felleisen replied:
> 
> > Part of the HtDP philosophy is that I want students to ask for
> > concepts. For example, once you have written the same list template
> > over and over again, you want them to say "isn't there a way to
> > avoid writing this same schema repeatedly? and you're ready with "I
> > am glad you asked, here are loops defined in ISL and they are what
> > you want." In the same spirit, I want them to ask for modules and
> > components.
> 
> As teachers, how do we put students in situations where they are
> stimulated to ask for modules and components?  Your list example is
> apropos, and I have certainly written this data definition many times
> this semester.  But my students have not once written 'require', nor
> have they ever seen *me* write 'require'.  Over the course of the
> term, there few functions that they see two or more times (search in a
> binary tree might be one), and no functions that they see defined over
> and over to the point of tedium.
> 
> To put some numbers on it, students might get 40 hours of lecture in
> which to become bored and irritated by seeing the same data definition
> over and over.  But they might get only 11 programming assignments,
> and if repetition is the technique we use to get them to ask for
> things, that repetition is going to crowd out something else?
> 
> So again, what situations do you put students in that motivate them to
> ask for components and modules?
> 
> 
> > My personal preference is to (1) not have code from one assignment
> > be critical for the next one ... [this] is important for weaker
> > students.
> 
> I see merits both ways, and I tend to do some of each.  In real life,
> code from last week can be critical for next week.  And I want to
> militate against an experience that is too common among university
> students: code is built, used, then thrown away and never examined
> again.
> 
> But by having code from one assignment be critical to the next, I now
> place myself in a difficult position:
> 
>   - I want them to reuse their earlier code.
> 
>   - I have told them that programming by "clone and modify" is not
>     acceptable.  And I have asked N times in lab, "what part of the
>     design recipe says to copy the solution to a previous problem and
>     start editing it?"
> 
>   - I have given them no mechanism by which they can reuse a previous
>     solution. 
> 
> For this term, I think I can't work my way out of this one: I can use
> Matthew's workaround to get `provide`, but I have no infrastructure
> that would enable them to submit a solution spread across multiple
> source files...
> 
> I'd like to hear other teachers' thoughts on using modules in the
> first course.  It is considered an important part of our current first
> course, so if I want to get my colleagues to use the HtDP
> infrastructure, I will have to have a better story about it.
> 
> Are you using modules?  How do you motivate them?  If you allow your
> students to spread a program across multiple modules, what
> infrastructure do you use to manage submissions?
> 
> 
> Norman
> ________________________
> PLT Educators talk list:
>   http://lists.racket-lang.org/plt-edu-talk
> ________________________
> PLT Educators talk list:
>  http://lists.racket-lang.org/plt-edu-talk

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to