EVALHOOK

This package is adapted from the implementation by Dave Dyer (DDyer@ISIB).

"EVALHOOK", an extension to the standard Interlisp to  make it easy to step or trace the interpreter.  The specs for EVALHOOK are stolen from MACLISP.

EVALHOOK is a global variable, which if not NIL, is a function object to be APPLY'd to an object in place of EVAL. 

(EVALHOOK obj function) is a function that sets the variable EVALHOOK to function, and evals obj without noticing the new value of EVALHOOK.

How it works:  If EVALHOOK is not nil, it is set to NIL and function indicated by EVALHOOK is apply'd to the object being eval'd.  The tracer called  this way will normally call (EVALHOOK obj 'myself) at some point, which will do the actual evaluation and continue tracing lower levels of the form.

	Example:
		(DEFINEQ (HOOK (OBJ)
		  (EVALHOOK (PRINT OBJ) 'HOOK))

(HOOK anything) will evaluate "anything" printing each
		sub-form before it is evaluated.