You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Common Lisp中能否获取不自动转为大写的符号名称?

如何在Common Lisp中获取大小写敏感的符号名称?

好问题!这里的核心在于Common Lisp处理符号名称的默认行为,咱们一步步拆解:

为什么(symbol-name 'aAbB)返回"AABB"

Common Lisp的**读取器(Reader)**默认会自动将符号中的小写字母转换为大写字母。也就是说,当你输入'aAbB时,Lisp读取器已经把这个符号标准化为名称是"AABB"的符号——原输入的大小写信息在读取阶段就已经丢失了,所以不存在所谓的OTHER_FUNCTION?能从这个符号里找回"aAbB",因为符号本身的名称就是大写的。

怎么实现大小写敏感的符号名称获取?

如果需要保留符号名称的大小写,你得在定义符号时告诉读取器不要转换大小写,有两种常用方式:

  • 用竖线包裹符号:这是最便捷的方式,直接用|把符号括起来,比如'|aAbB|。此时调用(symbol-name '|aAbB|)就会返回"aAbB",完全保留原大小写。
  • 用反斜杠逐个转义:对需要保留小写的字母前加\,比如'a\Ab\B,不过这种方式适合单个字符的场景,不如竖线高效。

实际代码示例

;; 普通符号:读取器自动转大写
(symbol-name 'aAbB) ; 输出 "AABB"

;; 转义后的符号:保留原始大小写
(symbol-name '|aAbB|) ; 输出 "aAbB"

总结

  • 对于已经被读取器转成大写的符号,无法恢复输入时的大小写——因为那部分信息已经丢失。
  • 要使用大小写敏感的符号名称,必须在创建符号时通过竖线或反斜杠转义的方式保留大小写。

内容的提问来源于stack exchange,提问作者christian wuensche

火山引擎 最新活动