Chapter 2

Interface Essentials

The DrScheme window has three parts: a row of buttons at the top, two editing panels in the middle, and a status line at the bottom.

The top editing panel, called the definitions window, is for defining Scheme programs. The above figure shows a program that defines the function square.

The bottom panel, called the interactions window, is for evaluating Scheme expressions interactively. The Language line in the interactions window indicates which primitives are available in the definitions and interactions windows. In the above figure, the language is Beginning Student, which is the default language.

Clicking the Execute button evaluates the program in the definitions window, making the program's definitions available in the interactions window. Given the definition of square as in the figure above, typing (square 2) in the interactions window produces the result 4.

The status line at the bottom of DrScheme's window provides information about the current line and position of the editing caret, whether the current file can be modified, and whether DrScheme is currently evaluating any expression. The recycling icon flashes while DrScheme is ``recycling'' internal resources, such as memory.

2.1  Buttons

The left end of the row of buttons in DrScheme contains a miniature button with the current file's name. Clicking the button opens a menu that shows the file's full pathname. Selecting one of the menu entries opens file starting in the corresponding directory.

Below the filename button is a (define ...) button for a popup menu of names defined in the definitions window. Selecting an item from the menu moves the blinking caret to the corresponding definition.

The Save button appears whenever the definitions window is modified. Clicking the button saves the contents of the definitions window to a file. The current name of the file appears to the left of the Save button, but a file-selection dialog appears if the file has never been saved before.

The Step button starts The Foot, which shows the evaluation of a program as a series of small steps. Each evaluation step replaces an expression in the program with an equivalent one using the evaluation rules of DrScheme. For example, a step might replace (+ 1 2) with 3. These are the same rules used by DrScheme to evaluate a program. Clicking Step opens a new window that contains the program from the definitions window, plus three new buttons: Next, Previous, and Home. Clicking Next performs a single evaluation step, clicking Previous retraces a single step, and clicking Home returns to the initial program. The Foot works only for programs using the Beginning Student language level.

Clicking the Check Syntax button annotates the program text in the definitions window. It add these annotations:

The Execute button evaluates the program in the definitions window and resets the interactions window.

The Break button interrupts an evaluation, or beeps if DrScheme is not evaluating anything. For example, after clicking Execute or entering an expression into the interactions window, click Break to cancel the evaluation. Click the Break button once to try to interrupt the evaluation gracefully; click the button twice to killing the evaluation immediately.

An Analyze button appears if you have installed the MrSpidey static debugger. Clicking the button starts the debugger on the program. See PLT MrSpidey: Static Debugger Manual for more information.

2.2  The Editor

DrScheme's editor provides special support for managing parentheses in a program. When the blinking caret is next to a parenthesis, DrScheme shades the region between the parenthesis and its matching parenthesis. This feature is especially helpful when for balancing parentheses to complete an expression. Furthermore, if you type a closing parenthesis ``)'' that should match an opening square bracket ``['', the editor automatically converts the ``)'' into a ``]''. DrScheme beeps whenever a closing parenthesis does not match an opening parenthesis.

DrScheme also flashes quotation mark matches, just like parentheses. Beware, however, that DrScheme cannot distinguish between closing an opening quotation marks. Thus, when you type an opening quotation mark, DrScheme may flash a match to the previous closing quotation mark.

Although whitespace is not significant in Scheme, DrScheme encourages a particular format for Scheme code. When you type Enter or Return, the editor inserts a new line and automatically indents it. To make DrScheme re-indent an existing line, move the flashing caret to the line and hit the Tab key. (The caret can be anywhere in the line.) You can re-indent an entire region by selecting the region and typing Tab.

2.3  The Interactions Window

The interactions window lets you type an expression after the > prompt for immediate evaluation. You cannot modify any text before the last > prompt. To enter an expression, the flashing caret must appear after the last prompt, and also after the space following the prompt.

When you type a complete expression and hit Enter or Return, DrScheme evaluates the expression and prints the result. After printing the result, DrScheme creates a new prompt for another expression. Some expressions return a special ``void'' value; DrScheme never prints void, but instead produces a new prompt immediately.

If the expression following the current prompt is incomplete, then DrScheme will not try to evaluate it. In that case, hitting Enter or Return produces a new, auto-indented line.

To copy the previous expression to the current prompt, type ESC-p (i.e., type Escape and then type p). Type ESC-p multiple times to cycle back through old expressions. Type ESC-n to cycle forward through old expressions. Also, if you move the flashing caret after an old expression and hit Enter or Return, DrScheme copies the expression to the current prompt.

Clicking the Execute button evaluates the program in the definitions window and makes the program's definitions available in the interactions window. Clicking Execute also resets the interactions window, erasing all old interactions and removing old definitions from the interaction environment. Although Execute erases old > prompts, ESC-p and ESC-n can still retrieve old expressions.

2.4  Errors

Whenever DrScheme encounters an error while evaluating an expression, it prints an error message in the interactions window and highlights the expression that triggered the error. The highlighted expression might be in the definitions window, or it might be after an old prompt in the interactions window.

For certain kinds of errors, DrScheme turns a portion of the error message into a hyperlink. Click the hyperlink to get help regarding a function or keyword related to the error.

2.5  Languages

DrScheme supports multiple dialects of Scheme. The name of the current evaluation language always appears in in the top of the interactions window. To choose a different language, select the Language|Choose Language... menu item. After changing the language, click Execute to reset the language in the interactions window.

Five of DrScheme's languages are specifically designed for teaching:

The teaching languages different from conventional Scheme in a number of ways, described below.

DrScheme also supports several languages for experienced programmers:

The Language|Choose Language... dialog contains a Show Details button for configuring certain details of the language specification. (Each option corresponds to one of the lines in the language table, but only a few of the lines in the figure have an option in the dialog.) Whenever the selected options do not match the default language specification, a Custom indicator appears next to the language-selection control at the top of the dialog.

The teaching languages differ from conventional Scheme in a number of ways:

The teaching languages also deviate from traditional Scheme in printing values. Different printing formats can be selected for any language through the detail section of language-selection dialog.

2.6  Executables

DrScheme's Create Executable... menu allows you to create your own separate programs that you can use without starting up all of DrScheme. To use them, first save your program to a file and set the language level and teachpacks. Click execute, just to be sure the program is working as you expect. Then, choose the Create Executable... menu item from the Scheme menu. Choose a place to save the executable and you will be able to use the executable as you use any other program on your computer.

Some language levels will prompt you to choose between a stand-alone executable and a launcher. Each has advantages and disadvantages. A launcher may not be copied to another computer (even the same kind of computer) and it will always load the latest version of your program. If you delete the program file, the launcher will stop working. A stand-alone executable can be copied to another computer (it must be have the same family of processor and be running the same operating system as your computer) but will not load the the latest version of your program; it always runs the version that existed when you created the stand-alone executable. Also, stand-alone executables are much larger than launchers.

TIP: You might want to disable debugging in the language dialog before creating your launcher. With debugging enabled, you will see the a stacktrace for error messages, but your program will be several factors slower. In order to disable debugging, open the language dialog, click the Show Details button and click the No debugging or profiling check box, if it is available.

2.7  Printed Results

2.7.1  Constructor-style Output

DrScheme's constructor-style output treats cons, vector, and similar primitives as value constructors, rather than functions. It also treats list as shorthand for multiple cons's ending with the empty list. Constructor-style printing is valuable for beginning computer science students, because output values look the same as input values.

Results printed in DrScheme's interactions window using constructor-style printing look different than results printed in traditional Scheme implementations, which use write to print results. The table in Figure 1 shows the differences between values printed in constructor style and values printed with write.

Figure 1:  Comparison of constructor-style output to write

2.7.2  Quasiquote-style Output

Constructor-style output is inconvenient for printing S-expression results that represent programs. For example, the value '(lambda (x) (lambda (y) (+ x y))) prints as

(list 'lambda (list 'x) (list 'lambda (list 'y) (list '+ 'x 'y)))
with constructor-style printing.

DrScheme's quasiquote-style output combines the input-output invariance of constructor-style printing with the S-expression readability of write. It uses quasiquote to print lists, and uses unquote to escape back to constructor style printing for non-lists and non-symbols.

With quasiquote-style printing, the above example prints as:

`(lambda (x) (lambda (y) (+ x y)))

This example:

(list 'lambda (list 'x) (box '(lambda (y) (+ x y))))
in quasiquote-style printing prints as:
`(lambda (x) ,(box `(lambda (y) (+ x y))))

2.8  Input and Output

Many Scheme programs avoid explicit input and output operations, obtaining input via direct function calls in the interactions window, and producing output by returning values. Other Scheme programs explicitly print output for the user during evaluation using write or display, or explicitly request input from the user using read or read-char.

Explicit input and output appear in the interactions window, but within special boxes that separate explicit I/O from normal expressions and results. For example, evaluating

in the interactions window produces a special box for entering input:

(The underscore indicates the location of the flashing caret.) Type an number into the box and hit Enter, and that number becomes the result of the (read) expression. If you type 5, the overall interaction appears as follows:

The mouse cursor becomes a watch whenever DrScheme is evaluating expression, but you can still use the mouse to move the selection in an input box.

Output goes to the same box as input. If you execute the program

and provide the input S-expression (1 2), the interactions window ultimately appears as follows:

In this example, display produces output immediately beneath the input you typed, but the final result was printed outside the box because it is the result of the program, rather than explicit output. (The above example assumes constructor-style printing. With traditional value printing, the final line outside the box would be (1 2).)

Entering the same program line-by-line in the interactions window produces a different-looking result:

Although it is the same program as before, entering the program expression-by-expression demonstrates how each prompt creates its own I/O box.

2.9  XML

DrScheme has special support for XML concrete syntax. The Special menu's Insert XML Box menu inserts an embedded editor into your program. In that embedded editor, you type XML's concrete syntax. When a program containing an XML box is evaluated, the XML box is translated into an x-expression (or xexpr). Xexprs are s-expression representation for XML expressions. Each xexpr is a list whose first element is a symbol naming the tag, second element is an association list representing attributes and remaining elements are the nested XML expressions.

XML boxes have two modes for handling whitespace. In one mode, all whitespace is left intact in the resulting xexpr. In the other mode, any tag that only contains nested XML expressions and whitespace has the whitespace removed. You can toggle between these modes by right-clicking or control-clicking on the top portion of the XML box.

In addition to containing XML text, XML boxes can also contain Scheme boxes. Scheme boxes contain Scheme expressions. These expressions are evaluated and their contents are placed into the containing XML box's xexpr. There are two varieties of Scheme box: the standard Scheme box and the splicing Scheme box. The standard Scheme box inserts its value into the containing xexpr. The contents of the splice box must evaluate to a list and the elements of the list are ``flattened'' into the containing xexpr. Right-clicking or control-clicking on the top of a Scheme box opens a menu to toggle the box between a Scheme box and a Scheme splice box.


1 More precisely, Pretty Big is MrEd extended with the following MzLib libraries (see PLT MzLib: Libraries Manual): etc.ss, file.ss, list.ss, class.ss, unit.ss, unitsig.ss, include.ss, defmacro.ss, pretty.ss, string.ss, thread.ss, math.ss, match.ss, and shared.ss.