Your assignment is to modify microscheme so that definitions using dotted-tail notation will work. Microscheme source code is found on the class web site. To experiment with microscheme, load the source code into Dr. Scheme, execute it, and then type the command (micro-r-e-p). Then interactively test microscheme. When finished, type (exit) to get out of microscheme (if you haven't broken something and caused a Scheme error). Make changes in the source code, execute it and type the command (micro-r-e-p) again, etc.
If you have correctly modified microscheme.scm to handle dotted-tail notation, you should get the following behavior after executing it in DrScheme:
> (micro-r-e-p) micro> (define (f0 . args) args) #<void> micro> (f0 1 2 3 4) (1 2 3 4) micro> (define (f1 x . y) (cons x (cons y ()))) #<void> micro> (f1 1 2 3 4) (1 (2 3 4)) micro> (define (f2 x y . z) (cons x (cons y (cons z ())))) #<void> micro> (f2 1 2 3 4) (1 2 (3 4)) micro> (exit) "Leaving microscheme" >HINT: It turns out that microscheme already executes the define statements correctly, that is, it constructs the proper representation for the defined procedure. For example, if you type (define (f0 . args) args) and then type f0, you will get the procedure representation (procedure args (begin args) <an environment>) which is just what it should be for dotted-tail notation. The problem arises when (f0 1 2 3 4) is evaluated. The procedure application process can't handle the parameters that appear in dotted-tail notation. You have to modify the procedure application process so that each parameter gets bound to the correct value.
It turns out that this assignment can be done by changing only one procedure definition in microscheme.scm. Submit your version of that one procedure to the Automated Tester. It will supply all the other procedures needed to run microscheme for testing. The tester will run microscheme with the trace feature turned on so that you can get more feedback about what microscheme was trying to do when a Scheme error occurs. The output from the tester will be a long trace followed by a line that says PASS or FAIL, or that shows a Scheme error message.