在 Common Lisp 中,符号名称是否有定义的最大长度?
In Common Lisp, is there a defined maximum length for a symbol's name?
我无法在 Hyperspec 或 Common Lisp:语言(第二版)中找到此信息。与实现相关的常量,如 LAMBDA-PARAMETERS-LIMIT
和 CALL-ARGUMENT-LIMIT
,但不是 SYMBOL-NAME-LENGTH-LIMIT
或 PRINTABLE-SYMBOL-NAME-MAX-LENGTH
.
最长名称的标准符号是UPDATE-INSTANCE-FOR-DIFFERENT-CLASS
和UPDATE-INSTANCE-FOR-REDEFINED-CLASS
,都是35个字符长,所以我想35个可以作为最大值。我不希望为符号命名比这更长的名称,但总有一天它会很重要。
在 Common Lisp 中,符号的名称是字符串,字符串是向量(一维数组),因此字符串的长度受限于 array-dimension-limit
。
根据 CL HyperSpec http://www.lispworks.com/documentation/HyperSpec/Body/v_ar_dim.htm#array-dimension-limit array-dimension-limit
是:
A positive fixnum, the exact magnitude of which is implementation-dependent, but which is not less than 1024.
实际上,SBCL 报告
* array-dimension-limit
4611686018427387901
所以这并不是真正的限制。
我无法在 Hyperspec 或 Common Lisp:语言(第二版)中找到此信息。与实现相关的常量,如 LAMBDA-PARAMETERS-LIMIT
和 CALL-ARGUMENT-LIMIT
,但不是 SYMBOL-NAME-LENGTH-LIMIT
或 PRINTABLE-SYMBOL-NAME-MAX-LENGTH
.
最长名称的标准符号是UPDATE-INSTANCE-FOR-DIFFERENT-CLASS
和UPDATE-INSTANCE-FOR-REDEFINED-CLASS
,都是35个字符长,所以我想35个可以作为最大值。我不希望为符号命名比这更长的名称,但总有一天它会很重要。
在 Common Lisp 中,符号的名称是字符串,字符串是向量(一维数组),因此字符串的长度受限于 array-dimension-limit
。
根据 CL HyperSpec http://www.lispworks.com/documentation/HyperSpec/Body/v_ar_dim.htm#array-dimension-limit array-dimension-limit
是:
A positive fixnum, the exact magnitude of which is implementation-dependent, but which is not less than 1024.
实际上,SBCL 报告
* array-dimension-limit
4611686018427387901
所以这并不是真正的限制。