Your work in this class will include a project in which you use the
ML programming language to model real-world data of phenomena. You will
pick some domain of information, write a set of ML datatypes that
capture that information, and write a set of ML functions that operate
on that information.
As a quick example, in Sections 1.10 and 2.3 of the textbook, a series of datatypes are used to model meals at a restaurant:
datatype bread = White | MultiGrain | Rye | Kaiser;
datatype spread = Mayo | Mustard;
datatype vegetable = Cucumber | Lettuce | Tomato;
datatype deliMeat = Ham | Turkey | RoastBeef | ExtraVeg of vegetable;
datatype noodle = Spaghetti | Penne | Fusilli | Gemelli | Farfalle;
datatype sauce = Pesto | Marinara | Creamy;
datatype protein = MeatBalls | Sausage | Chicken | Tofu;
datatype entree = Sandwich of bread * spread * vegetable * deliMeat | Pasta of noodle * sauce * protein;
datatype salad = Caesar | Garden;
datatype side = Fries | Chips | CarrotSticks | GarlicBread | Salad of salad;
datatype beverage = Water | Coffee | Pop | Lemonade | IceTea;
datatype meal = Meal of entree * side * beverage;
Operations on datatypes like this could include calculating
something from them (say, the calories or price of a meal), comparing
two values of this data type (if a sandwich could have an indefinite
number of layers, then we could check which of two sandwiches had more
stuff), or modifying a value of this data type (for example,
substituting meat with something plant-based to make a meal vegetarian).
The textbook contains many and diverse examples of datatypes modeling real-world data and phenomena, including
There are others in Chapters 8 and 10, not covered in class.
Though you are permitted to expand on one of these examples, you are encouraged to come up with your own domain of information, something that interests you and that you already have knowledge about. To get you started thinking, here are some more ideas:
Ideally you will work on this with one partner (team of two), but I
will also allow solo projects and teams of three. Work on this project
will be spread throughout the semester so that as you can improve your
model and make it more sophisticated as you learn more ML. This
shouldn't be a reason to put it off, however. For most projects, most
of what you need to know will be covered in the first few weeks of the
class, so most teams will be able to do most of the work early in the
Your final submission will comprise four parts:
In assessing your datatypes, I will look at how you strike a balance between fidelity and richness on the one hand, and parsimony on the other hand. Every datatype should be used by a function or by another datatype.
In assessing your sample data, I will look to see that you exercise all datatypes, provide multiple examples that differ in their particulars, and provide enough data to exercise your functions. Ideally, you will identify a real-world dataset that is not too large: perhaps on the order of 20-50 items.
In assessing your functions, I will look for correctness, thoroughness, and variety.
I will also look for functions that answer realistic questions about the data or perform
transformations that someone might really want to do. Get functions working before you worry about efficiency.
In assessing style, I will look for
Janet Davis (firstname.lastname@example.org). Adapted from Thomas VanDrunen's project for CS/MATH 243, Wheaton College.Created August 28, 2016