Scheem Interpreter

If you don't understand interpreters, you can still write programs; you can even be a competent programmer. But you can't be a master.

Hal Abelson, in the foreword to Essentials of Programming Languages

In these exercises we'll work on defining a Scheem interpreter. Just in case you don't remember all the way back to last week, Scheem is our cut-down version of Scheme. We've got parsing covered, so we can assume that Scheem programs are represented as JavaScript lists. Atoms are just strings or numbers. We'll go through and steal a bunch of features from Scheme to make our Scheem language.

Interpreting arithmetic

What will our interpreter do? Let's start with arithmetic. Our interpreter should be able to evaluate Scheem programs like this.

Our interpreter function will be called evalScheem. It will take a fully parsed Scheem expression as input, and it will return the value the expression evaluates to. In the example above it will return 11. That's because 5+2*3=11. Look, Ma, I can do math!

Here's one way to write evalScheem that works for addition and subtraction.

Some things to notice: we use typeof to check whether the input is a single number or a list. Also, the evalScheem function recursively calls itself to evaluate the arguments to the operation. To do an addition, we evaluate the two arguments, add them, then return the sum.

Write an evalScheem function that can correctly handle multiplication and division operations along with addition and subtraction. All arithmetic operations take exactly two arguments.