在 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-LIMITCALL-ARGUMENT-LIMIT,但不是 SYMBOL-NAME-LENGTH-LIMITPRINTABLE-SYMBOL-NAME-MAX-LENGTH 之类的。

名字最长的标准符号是UPDATE-INSTANCE-FOR-DIFFERENT-CLASSUPDATE-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 中,符号名称是不是有定义的最大长度?的主要内容,如果未能解决你的问题,请参考以下文章

common-lisp:绑定和符号之间的区别

在 Common Lisp 中,是不是有从给定字符串返回符号的函数?

Common Lisp:将符号传递给宏

Common Lisp宏变量扩展

Common Lisp 中的原子和符号有啥区别?

为啥 Common Lisp 在没有引号的情况下评估符号本身?