【问题标题】: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个。我不希望将符号命名为比这更长的名称,但有一天它可能会很重要。

【问题讨论】:

标签: common-lisp language-lawyer symbols identifier


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多