OCaml Warm-Up
Due on Monday, January 23rd at 11:59 PM. This is an individual lab. You are to complete this lab on your own, although you may discuss the lab concepts with your classmates. Remember the Academic Integrity Policy: do not show your code to anyone outside of the course staff and do not look at anyone else’s code for this lab. If you need help, please post on the course forum forum or contact the instructor. If you have any doubts about what is okay and what is not, it’s much safer to ask than to risk violating the Academic Integrity Policy.
Overview
This lab will serve as an introduction to OCaml. You will write a series of functions and other snippets of code designed to familiarize you with the language. This will also ensure that your environment is prepared so you don’t have trouble in later assignments.
Getting Started
First and foremost, you must set up an environment to allow you to use OCaml. You have three choices here:
- You can use OCaml in person on the CS department lab machines. This requires that you have physical access to the lab.
- Follow the instructions in the OCaml Local Setup guide to set up the compiler on the CS network machines.
- Follow the instructions in the OCaml Local Development Environment Setup guide to get a productive code editing environment.
- You can use the CS network remotely with your own computer as a front-end. This requires a network connection as you work but is the simpler remote option.
- Follow the instructions in the OCaml Remote Setup guide. This will also help you set up your development environment.
- You can use your own computer exclusively without relying on the CS network. This is a bit more work, since you’ll need to install the compiler and other tools yourself.
- Follow the instructions in the OCaml Local Setup guide to set up OPAM and the OCaml compiler on your computer.
- Follow the instructions in the OCaml Local Development Environment Setup guide to get a productive code editing environment.
Whichever option you pick, you should have not only the ability to compile OCaml programs but also an editor that provides modern development features: syntax highlighting, code inspection, and so on. If you have trouble getting anything to work, make sure to post on the course forum for help. Please don’t try to get through this course programming in Notepad!
Working on the Lab
Once you have all of this working, you’ll need to check out your assignment. Assignments in this course will be distributed and submitted via the Swarthmore GitHub Enterprise instance. If you have never used the Swarthmore GitHub before, you should follow Tia Newhall’s GitHub Setup Guide. If you have taken CS31 or CS35 recently, you shouldn’t need to do this.
Once everything is configured, you can check out your assignment using the following command, replacing <username>
with your Swarthmore username:
git clone git@github.swarthmore.edu:cs75-s23/ocaml1-<username>
Your job in this assignment is to open each of the .ml
source files in your repository and complete the implementation tasks within. There are several files and you are encouraged to complete them in the following order:
helloWorld.ml
functions.ml
linkedLists1.ml
linkedLists2.ml
sushi.ml
Note that you’ll also be writing code in tests.ml
. It’s likely that you’ll want to do that simultaneously with your edits to the other files.
Throughout these files, there are several calls to failwith
using a string starting with “TODO
”; there are also comments containing the string “TODO
”. Your assignment will be complete when every one of these TODO
s has been replaced with appropriate code.
It may take you a while to become accustomed to a new language, so be patient with yourself. You may wish to keep the OCaml Transition Guide open as you work on the assignment so you can use it to help you make the shift from the languages you know to OCaml.
As a clarification for those who may already know or choose to explore the features of the OCaml language: you are not permitted to use any of the following when you are completing your assignment:
- Mutation (e.g.
ref
cells) - Imperative loops (
for
andwhile
) - Standard library modules (except
Stdlib
itself or where otherwise noted)
If you don’t know what the above means, don’t worry! Everything you learned in lecture is fine to use in this assignment.
Submitting
To submit your lab, just commit and push your work. The most recent pushed commit as of the due date will be graded. For more information on when assignments are due, see the Policies page.
After each lab, you will complete a brief questionnaire found here. In most cases, the questionnaire should take less than a minute. This questionnaire is required and will be used as part of your participation grade.
If You Have Trouble…
…then please contact your instructor! The course forum is the preferred method, but you can reach out via e-mail as well. Good luck!