SMoL🔗

What Is This Thread’s Purpose?

This thread consists will help you learn the Standard Model of Languages. It begins with a simple version of the model and becomes progressively richer.

Concretely, you will work with an automated tutor, the SMoL Tutor, that we have built for you. You work through the material at your own pace.

In general, it’s not hard “cheat” on these tasks; we haven’t tried to make it difficult to do so. But if you do, you will find the later parts of the course virtually impossible. So please work wisely.

Recall that for this thread, you are not allowed to discuss work with others while the assignment is in progress or with people who are using late days.

Time

Each module should take 10-20, and at most 30, minutes.

Grading Standard

The Tutor automatically tells you about the correctness of your work.

We do not at all expect you to answer all questions correctly. Indeed, it would be virtually impossible for you to do so: we’d be surprised if anyone got everything right. Counting how many things you get right will make you shift focus to scores—it’s not hard to cheat (or “cheat”) on these tasks—than on understanding, so we will not do so.

Instead, we only care that you (a) do all the tutorials and (b) put in a good-faith effort on each one. Trying to get help (from other people or AI tools or whatever) may help you “do better” or go quicker now, but you will find some later parts of the course virtually impossible. So please don’t do that.

Recall that for this track, you are not allowed to discuss work with others while the assignment is in progress or with people who are using late days.

Software

Note: The Tutor is new software. Currently, it does not have the ability to save state. That means you should finish every module you start; you can’t pause a module and resume it later. (You can, of course, take a break between modules.)

The Tutor shows you programs in multiple languages, to reinforce that the concepts you are learning are standard across languages. The language on the left, which is a pseudocode, is fixed; the one on the right varies randomly. You can change the random choice by using the 🎲 button. We recommend that you frequently roll the 🎲 to see the Lispy syntax. This will help you get more comfortable with the style of syntax you will be using to program in this course.

Tasks

At the end of each module, you will be provided a button to download a PDF version of completed modules. Please download each PDF and upload it to Gradescope. We recommend you also hold on to the PDFs: they will serve as a “textbook” and will be useful when you need to review the material (without having to do the entire Tutor again).

Please do the following topics (some are broken down into multiple modules, making it easier for you to take a break) from this version of the SMoL Tutor:
  • def: variable and function definitions

  • post1: a review module

  • vectors: mutable vectors/arrays

  • post2: a review module

  • mutvars: mutable variables

  • post3: a review module

  • refactor: a review module

  • lambda: higher-order functions and lambda expressions

  • post4: a review module

After that, please also do these two modules, which covers concepts specific to languages like Racket:
  • begin: sequencing expressions

  • local: local binding forms