identifier? is not defined,
usually this is enough:
(define identifier? symbol?)
have more study on define-datatype, this is used very frequently in EOPL.
If you used to it, it will very easy for reading much part of the code.
where I try to construct every exercises stand-alone.
I use Chicken-scheme.