Following directions from ftp://ftp.cs.utexas.edu/pub/boyer/nqthm/nqthm-1992/README, I get the following error:
- Code: Select all
;; Loading file /home/john/projects/nqthm/nqthm-1992/sloop.fas ...
;; Loading file /home/john/projects/nqthm/nqthm-1992/code-e-m.fas ...
** - Continuable Error
DEFUN/DEFMACRO(EXECUTE): #<PACKAGE EXT> is locked
If you continue (by typing 'continue'): Ignore the lock and proceed
The following restarts are also available:
SKIP :R1 skip 675 683 (DEFUN EXECUTE (PROCESS CL HIST ...) ...)-25
RETRY :R2 retry 675 683 (DEFUN EXECUTE (PROCESS CL HIST ...) ...)-25
STOP :R3 stop loading file /home/john/projects/nqthm/nqthm-1992/code-e-m.fas
ABORT :R4 Abort main loop
Break 1 >
The problem is in the source file ftp://ftp.cs.utexas.edu/pub/boyer/nqthm/nqthm-1992/code-e-m.lisp which, at line 675, has
(DEFUN EXECUTE (PROCESS CL HIST NORMAL-EXIT NO-CHANGE-EXIT) ...
This file starts with (IN-PACKAGE "USER"), so EXECUTE should be defined as USER::EXECUTE. Despite this, there's a name clash, apparently because the EXT package exports all of its exported symbols into the current namespace, and locks its own package, making its exported symbols de-facto reserved words.
There's a comment in the code:
- Code: Select all
; Sadly, we do everything in the USER package. This is not the best
; Lisp style for an old and established Common Lisp system, but it is
; by far the simplest and clearest approach we could find given the
; variety of implementations of Common Lisp's "Put in seven extremely
; random user interface commands". If your USER package contains
; symbols that conflict with ours, we apologize but offer no fix.
I could go into the source code and rename all occurrences of EXECUTE to something else, such as EXECUTE-PROCESS; there are only about 8 occurrences. But I'd prefer not to modify the classic source code, untouched since 1992. Is there a better way to do this?