This page is kept for historical purposes only. Please see the home page for my current situation. —Luca Saiu.

Solution

I can show you my solution, now that the deadline has expired. Here it is.

DEVL 2009 - Third TP (2009-10-06)

Task: write an expression simplifier.

Deadline: the end of the afternoon lab session.

No group projects for this without my authorization.

Details

I have written some Scheme code for symbolically computing the derivative of an expression. The code is very similar to what I have sketched last week on the blackboard, with the only significant difference of using quasiquoting instead of the list function.

You can find the code here:

The code works, but produces very redundant expressions: for example (derivative '(* x a) 'x) returns (+ (* 1 a) (* 0 x)) instead of just a.

Your task consists in writing a function taking an expression (for example the result of a derivative call) and returning another equivalent but simpler expression. For example (+ 0 (* (sin x) 1)) should be trasformed into (sin x).

Execute this at the beginning, if you are in the lab:

source ~saiu/add-prefix ~saiu/usr
then you can use guile.

There are many possible solutions of varying complexity and power; I will take both point of views in consideration when assigning your bonus. Pay attention to copyright and license headers.


Back to my home page...


Luca Saiu
Last modified: 2009-10-15
Copyright © 2009 Luca Saiu
Verbatim copying and redistribution of this entire page are permitted provided this notice is preserved.