@rml You can't turn something into Lisp according to the criterion above just by writing some definitions: if you just wrote them, they obviously are not used in practice.

Besides, no matter how you try to implement defun in Scheme, it won't do what it does in CL: no separate function namespace. unwind-protect is not the same as dynamic-wind. “let loop” is not the same as CL's loop. defmacro is discouraged (but yeah, some Scheme implementations offer it under the table anyway because Scheme's own approach to macros misses the point of Lisp macros, and users want Lisp macros).