### 8.4 Evaluation

Scheme mode also provides commands for evaluating Scheme expressions. The simplest evaluation command is `C-x C-e`, which evaluates the expression to the left of point. (This key is bound in all buffers, even if they don’t contain Scheme code.) The command `M-z` evaluates the definition that point is in (a definition is an expression starting with a left parenthesis in the leftmost column). The command `M-:` prompts for an expression in the minibuffer, evaluates it, and prints the value in the echo area.

Other commands that evaluate larger amounts of code are `C-M-z`, which evaluates all of the expressions in the region, and `M-o`, which evaluates the entire buffer. Both of these commands are potentially dangerous in that they will evaluate anything that appears to be an expression, even if it isn’t intended to be.

Normally, these commands evaluate expressions by sending them to a REPL buffer, which performs the evaluations in a separate thread. This has two advantages: it allows you to continue editing while the evaluation is happening, and it keeps a record of each evaluation and its printed output. If you wish to stop a running evaluation and to erase any pending expressions, use the `C-c C-c` command from any Scheme buffer. (Note that by default, Edwin starts up with one REPL buffer, called ‘`*scheme*`’.)

If you would prefer to have Scheme mode evaluation commands evaluate directly, rather than sending expressions to the REPL buffer, set the Edwin variable `evaluate-in-inferior-repl` to `#f`. In this case, you will not be able to use Edwin while evaluation is occurring; any output from the evaluation will be shown in a pop-up buffer when the evaluation finishes; and you abort the evaluation using `C-g`.