首页 > 解决方案 > 在 Common Lisp 中,符号名称是否有定义的最大长度?

问题描述

我无法在Hyperspec或 Common Lisp: The Language(第二版)中找到这些信息。与实现相关的常量,例如LAMBDA-PARAMETERS-LIMITand CALL-ARGUMENT-LIMIT,但不是类似SYMBOL-NAME-LENGTH-LIMITor的东西PRINTABLE-SYMBOL-NAME-MAX-LENGTH

名称最长的标准符号是UPDATE-INSTANCE-FOR-DIFFERENT-CLASSand UPDATE-INSTANCE-FOR-REDEFINED-CLASS,都是 35 个字符长,所以我认为最多可以取 35 个字符。我不希望给一个符号命名比这更长的东西,但有一天它可能很重要。

标签: common-lisplanguage-lawyersymbolsidentifier

解决方案


在 Common Lisp 中,符号的名称是字符串,字符串是向量(一维数组),因此字符串的长度受限于array-dimension-limit.

根据 CL HyperSpec http://www.lispworks.com/documentation/HyperSpec/Body/v_ar_dim.htm#array-dimension-limit array-dimension-limit是:

一个正的固定数,其确切大小取决于实现,但不小于 1024。

实际上,SBCL 报告

* array-dimension-limit
4611686018427387901

所以这并不是一个真正的限制。


推荐阅读