This document describes how to setup and use the DrRacket environment for programming in the Racket language in CS 251. Full DrRacket documentation is available on the Racket language website.

Contents

Installation and Startup

CS Linux machines have DrRacket installed. To run it, execute the command drracket in a terminal.

DrRacket is available for several platforms at https://download.racket-lang.org/ if you want to install it on your own computer.

Interface

The DrRacket window is split into Definitions on the top and Interactions on the bottom.

Create and save files (with a .rkt extension) in the Definitions editor. Experiment in the Interactions REPL (read-eval-print loop) – text typed here is not saved (by default).

File structure

Follow these guidelines when creating new Racket files.

Choose a language (Racket)

Start each Racket file with the line:

#lang racket

to indicate that you are using the Racket language.

If you want to experiment in the Interactions REPL without saving a file, the Interactions REPL still requires you to choose a language. If the Interactions REPL has no language selection (it will print an error about this), add #lang racket in the Definitions window and click Run.

Provide definitions

For Racket files you submit (e.g., assignment.rkt), the second non-comment line must be:

(provide (all-defined-out))

In the Lisp and Scheme languages (Racket’s grandparent and parent), all top-level definitions are globally visible. Racket adds a module system. By default, Racket definitions are only visible (in scope) within a file (module). (We will discuss modules later in the course with a different language.) provide makes these definitions globally visible for our testing system.

Separate testing files

To write tests in a separate file test.rkt from function definitions (say, assignment.rkt), load the definitions from assignment.rkt in test.rkt:

(require "assignment.rkt")

Both files need to start with #lang racket. Unlike assignment.rkt, test.rkt does not need to provide anything.

Using DrRacket

For the most part DrRacket is an easy-to-use system with lots of documentation. Here are a few specific notes related to how we will use it:

  • Click Run to have the Interactions REPL (read-evaluate-print loop) process the current Definitions.
  • Clicking Run loads the Definitions in a fresh Interactions REPL. Any bindings you made in the Interactions REPL will be lost.
  • The Interactions REPL has history: use Control-↑ (that’s the up arrow key) to summon previously entered lines. This history remains available across Run (and even across opening and closing DrRacket) even though it does not remain in the environment across these events.
  • When using a separate testing file as described in the previous section, click Run in the window that shows the testing file.
  • If you cause infinite recursion (i.e., an expression is taking long enough to evaluate that you suspect it will run forever), click Stop.
  • The Tab key (re-)indents a line properly. You can select multiple lines and hit Tab to indent all selected lines properly.
  • If you type ), DrRacket will replace it with ] if doing so will match a [.
  • Typing Alt-\ on Linux or Command-\ on a Mac inserts a λ character if lambda is too much for you.
  • DrRacket supports many Emacs keybindings. We will use Emacs later in the course, so learning them now is a great idea.

Acknowledgements

This document is adapted from a similar document by Dan Grossman at the University of Washington.