common-lisp - CLISP 错误消息 : an object cannot start with #\). 这是什么意思?

标签 common-lisp quote clisp

请参阅此示例。我正在使用 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*

我确实明白是双引号引起了问题。我明白的是,对象不能以 #\) 开头是什么意思?我从哪里开始使用#\)?我期待一些错误消息,例如 unmatched Parenthesis

最佳答案

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

(defparameter *pudding-eater* 'henry '(a b c))

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

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

因此,错误消息没有说明任何有关 \# 字符的内容,仅说明 ),并且它告诉您有一个它需要更多表达式,而不是当前表达式的末尾(因为您通过添加 ' 字符启动了一个表达式)。

关于common-lisp - CLISP 错误消息 : an object cannot start with #\). 这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758660/

相关文章:

clojure - 如果在 Lisp 中读取、编译和运行时没有区别,有人能给我一些直观的例子吗?

Lisp:引用符号值列表

linux - Bash Shell - 引用问题

mysql 算术函数中的单引号

lisp - 在 lisp 中实现 equal 和 equals 的麻烦

lisp - 什么版本的 LISP 有 putprop?

arrays - 从 Common Lisp 中的文本文件中读取数组

common-lisp - 在Common Lisp中定义setf-expanders

common-lisp - 基本 Lisp 宏错误

loops - 不使用 set、setf 或 setq 重写