1) You have to implement the functions MAX-PLAYER and MIN-PLAYER. Each takes three arguments: * the tree to be searched, * an alpha value, and * a beta value, That is, (defun MAX-PLAYER (Tree Alpha Beta) . . . ) (defun MIN-PLAYER (Tree Alpha Beta) . . . ) The return value of these functions is the MINIMAX value of the root of the Tree given as input. 2) The command defvar is used to declare a global variable and assign an initial value to it. This command is used in the specification of homework 4 to declare the variable *Counter*: (defvar *Counter* 0) and the sample input trees: (defvar tree22 '((1 2) (3 4))) (defvar tree23 ...) ... 3) The variable counter is intended to measure the savings of the Alpha-Beta pruning algorithm. If no pruning is possible (or if the pruning mechanism is disabled) during the search, then after the search is performed, the variable *Counter* should be equal to the number of leaves in the tree. However, in most inputs the Alpha-Beta pruning algorithm will have many opportunities to prune the search. Thus, after the execution of the search the variable *Counter* will be smaller than the number of leaves on the tree. For example, in the sample input tree23 (a tree with uniform braching factor 2 and depth 3) we have 8 leaf nodes. Thus, after running a search algorithm which does not do any pruning, the value of counter should be 8. On the other hand, running Alpha-Beta pruning on the same input sets the variable *Counter* to 6. The only thing you have to do to implement this counting mechanism is to include the global variable declaration in your file: (defvar *Counter* 0) and every time the search reaches a leaf node you have to increment the counter using the command: (setq *Counter* (+ *Counter* 1) When testing your program, I'll make sure to always reset *Counter* to zero before starting the search on my test input. Note that you DON'T have to return of *Counter*. Since it is a global variable I can always check it after the search finishes.