剪辑错误消息:对象不能以 #\ 开头)。这是什么意思?

3x8*_*9g2 3 clisp common-lisp quote

请看这个例子。我正在使用 GNU CLISP 2.49。

(defparameter *pudding-eater* 'henry')
;; output: 
READ from
#<INPUT CONCATENATED-STREAM #<INPUT STRING-INPUT-STREAM> #<IO TERMINAL-STREAM>>: an
  object cannot start with #\)

(defparameter *pudding-eater* 'henry)
;; output: 
*PUDDING-EATER*
Run Code Online (Sandbox Code Playgroud)

我确实明白是双引号引起了问题。我明白的是,什么an object cannot start with #\)意思?我从哪里开始#\)?我期待一些错误消息,如umatched parenthesis.

ama*_*loy 5

您后面的额外引号字符'henry是另一个对象的开头,这在以下上下文中是有意义的:

(defparameter *pudding-eater* 'henry '(a b c))
Run Code Online (Sandbox Code Playgroud)

(如果 defparameter 接受了那么多参数,无论如何)

但是,引用后的下一个字符是关闭括号。用于显示字符(而不是符号、字符串等)的 Common Lisp 表示法是#\前缀,后跟字符。

因此,错误消息并没有说明关于\#字符的任何内容,只有),并且它告诉您有一个它期望更多表达式而不是当前表达式的结尾(因为您通过添加该'字符开始了一个表达式)。