Programming Assignment 1 – Symbolic Differentiation solution

Expert Systems / Heuristic Programming
Read Example: Symbolic Differentiation from the Structure and Interpretation of Computer Programs by Abelson and Sussman. This describes writing a symbolic differentiation capability in Scheme. Remember that Racket is based on Scheme and the code should run with little modification in Racket.
CSCI 4800 – Undergraduates
Implement the code discussed in the reading. Then, do the first two Exercises in the reading: (1) extend the basic differentiator to handle more kinds of expressions; and (2) extend the differentiation program to handle sums and products of arbitrary numbers of (two or more) terms.
CSCI 5800 – Graduates
B-level grade. Same as above, but make the code extensible. That is, store the differentiator for a function in a (hash) table using the function name (e.g., + or *) as a key and provide a suitable syntax for defining a differentiator.
A-level grade. B-level grade capability and separate out the simplification code from the differentiator code and provide a suitable syntax for defining a simplifier. Note that you only have to use information for a specific function to perform the simplification. That is, it may not be perfect, but it should be “good enough”.
As well as the code and examples, provide a short write up on your program – particularly your solutions to the Exercises.
Graduates may do just the CSCI 4800 problem with a C-level grade. It might be good to start with that anyway.
Undergraduates may do the Graduate B-level problem for a bonus of up to 5 points or the Graduate Alevel problem for a bonus of up to 10 points. But, they will be graded with the strictness given to graduate-level work.