[comp.lang.lisp] macro character error in KCl

eliot@phoenix.Princeton.EDU (Eliot Handelman) (11/27/90)

Some people will remember this from a previous discussion:

(defvar test-read-table (copy-readtable))

(set-macro-character #\: #'(lambda (stream char) :colon)
                            nil test-read-table)

(defun s (string)
  (let ((words '())
        (index 0)
        (*readtable* test-read-table))
      (loop
        (multiple-value-bind (word next-index)
            (read-from-string string nil nil :start index)
	  (setq index next-index)
	  (cond (word
	    (push word words))
		  (t
		   (return (nreverse words)))))))))

In KCl, (s "x:x") returns the error "There is no package named X."
I believe the correct behavior would be to return (X :COLON X).

Suggestions, workarounds?

--eliot