Lab 5 Instructions #
Reminders #

While other students are coming into class, follow the setup instructions below. (But please wait until you’re instructed before beginning work on the lab.)

If you still have some time before class, read the background on today’s lab puzzle below.

Preemptive highfive all your tablemates, in anticipation of a wonderful lab.

Swap drivers at each exercise. Nobody likes a driving hog.

We post lab solutions the next day, with extra information and ways of solving.

Do you have hints about the course? Let me know: shieber@seas.harvard.edu.
Setup instructions #
Head to http://url.cs51.io/lab5 and follow the Lab Procedures.
Lab puzzle #
Today’s puzzle, to be worked on individually, concerns a simple dice game called “doubles”, a variant of craps, which proceeds as follows: You roll two dice repeatedly until either you roll “doubles” (two of the same number) and lose or you roll a “natural” (in this game, a seven rolled as a three and a four) and win.
Appropriate types for the game and its outcomes are
type die =
One  Two  Three  Four  Five  Six ;;
type roll =
Roll of die * die ;;
type outcome =
 Doubles
 Natural
 Other ;;
Now we need a function that determines the outcome of a roll, either doubles, a natural, or something else. Below are some possible implementations of the function. Which ones work in the sense of generating no errors or warnings and having the correct behavior? If multiple answers work, select the first one that does. (Please: No cheating by running the answers through OCaml. The idea is for you to figure it out yourself.)
A.
let outcome roll =
match roll with
 Roll (x, x) > Doubles
 Roll (Three, Four)
 Roll (Four, Three) > Natural
 _ > Other ;;
B.
let outcome roll =
match roll with
 Roll (x, y) > if x = y then Doubles else Other
 Roll (Three, Four)
 Roll (Four, Three) > Natural
 _ > Other ;;
C.
match roll with
 Roll (x, y) > if x = y then Doubles
 Roll (Three, Four)
 Roll (Four, Three) > Natural
 _ > Other ;;
D.
let outcome roll =
match roll with
 Roll (Three, Four)
 Roll (Four, Three) > Natural
 Roll (x, y) > if x = y then Doubles else Other
 _ > Other ;;
E.
let outcome roll =
match roll with
 Roll (Three, Four) > Natural
 Roll (Four, Three) > Natural
 Roll (x, x) > Doubles
 _ > Other ;;
F.
let outcome roll =
match roll with
 Roll (Three, Four)
 Roll (Four, Three) > Natural
 Roll (x, y) > if x = y then Doubles else Other
 Roll (_, _) > Other ;;
G. None of them work.