CSCI 330 Lab 3: macros

The primary focus of lab3 is to practice creating and using macros, while the secondary focus is to gain further practice with the use of let-over-lambda and other lisp features.

The lab can be obtained and submitted through our usual git approach (repo name 'lab3' this time), and the starting repo contains the same two files as lab2: The behavioural specs for bldRanker are the same as for lab2, and you are welcome to re-use your code from lab2, or develop new code, or base your lab3 work on the posted lab2 sample solution (though that won't be posted until about 5 days after the lab2 due date).

Your task

For this lab your objective is to add a set of lisp macros to your lab3.cl and test3.cl that make the bldRanker and testing code easier to work with, and refactor the code in those files to use your macros.

Your macro suite should include at least : Note that your macros can be used on any aspect of your bldRanker/test code (i.e. including your helper functions, how test cases are written, run, or assessed, etc).

Each macro's implementation should be accompanied by a set of comments that clearly describe how the transformation works, and a short description on how/where in your code it has been utilized and tested.

Got a cool idea for syntax you'd like to add/use but can't work out a macro for it?
Add it in comments near the top of lab3.cl and explain what you were trying to do and where it seemed to go wrong. A key aspect of this lab is thinking about how/where macros might help, so a good idea is worth marks even if the code didn't work out in the end.
As always when working with macros, keep in mind that the macro re-writes of the source code take place at compile time, not run time, so the defmacro code doesn't have access to runtime variable/parameter content, all it can do is generate code that will give the desired behaviour at runtime.