在 Common Lisp 中,符号名称是不是有定义的最大长度?
Posted
技术标签:
【中文标题】在 Common Lisp 中,符号名称是不是有定义的最大长度?【英文标题】:In Common Lisp, is there a defined maximum length for a symbol's name?在 Common Lisp 中,符号名称是否有定义的最大长度? 【发布时间】:2019-12-06 06:51:46 【问题描述】:我无法在 Hyperspec 或 Common Lisp: The Language(第二版)中找到此信息。与实现相关的常量,例如 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个。我不希望将符号命名为比这更长的名称,但有一天它可能会很重要。
【问题讨论】:
***.com/a/426120/3931349?? @rsm 谢谢。所以标准最小值是 1024 个字符;如果您想将其作为答案,请继续。 【参考方案1】:在 Common Lisp 中,符号的名称是字符串,字符串是向量(一维数组),因此字符串的长度受array-dimension-limit
的限制。
根据 CL HyperSpec http://www.lispworks.com/documentation/HyperSpec/Body/v_ar_dim.htm#array-dimension-limit array-dimension-limit
是:
一个正的fixnum,其确切大小取决于实现,但不小于1024。
实际上,SBCL 报告
* array-dimension-limit
4611686018427387901
所以这并不是真正的限制。
【讨论】:
旁注:CLtL2 并不是真正的规范。它是对指定为 ANSI Common Lisp 之前的 Common Lisp 版本的语言描述。因此与实际的 ANSI CL 规范存在差异。与规范内容基本相同的内容的 html 呈现是 HyperSpec:lispworks.com/documentation/HyperSpec/Front/Contents.htm @RainerJoswig 哦,我不知道,谢谢!我将 CLtL2 部分更改为 HyperSpec。以上是关于在 Common Lisp 中,符号名称是不是有定义的最大长度?的主要内容,如果未能解决你的问题,请参考以下文章