\$\begingroup\$
\$\endgroup\$
1
I have written a Common Lisp implementation of Scheme's s-expression comments (SRFI 62):
(eval-when (:compile-toplevel
:load-toplevel
:execute)
(defun handle-s-expression-comment (stream char n)
(declare (ignore char))
(when n
(error "Infix parameter not allowed in s-expression comment."))
(read stream) ; Discard the next s-expression.
(values))
(set-dispatch-macro-character #\# #\; #'handle-s-expression-comment))
With s-expression comments:
(+ 1 #;(* 2 3) 4)
returns5
(list 'x #;'y 'z)
returns(x z)
(* 3 4 #;(+ 5 6))
returns12
(#;sqrt abs -123)
returns123
Is my implementation correct? What improvements can I make?
lang-lisp
(read stream)
should be(read stream t nil t)
instead. Refer to: read's recursive-p argument when used inside a reader macro. \$\endgroup\$