chi*_*der 3 string symbols common-lisp case-sensitive
(这是其中一个似乎应该如此简单的事情,我想可能有一个更好的方法)
我正在尝试定义一个宏(用于CLISP),它接受可变数量的参数作为符号(然后将其转换为区分大小写的字符串).
(defmacro symbols-to-words (&body body)
`(join-words (mapcar #'symbol-name '(,@body))))
Run Code Online (Sandbox Code Playgroud)
将符号转换为大写字符串,而
(defmacro symbols-to-words (&body body)
`(join-words (mapcar #'symbol-name '(|,@body|))))
Run Code Online (Sandbox Code Playgroud)
对待,@ body作为单个符号,没有扩展.
有任何想法吗?我想这可能是一个更简单的方法.
在读取步骤期间,符号名称是大写的,这在宏展开之前发生,因此没有什么可以用宏来影响它.您可以全局设置READTABLE-CASE,但这会影响所有代码,特别是您必须在源代码中以大写形式编写所有标准符号.CLISP还有一个"-modern"选项,它为标准库的名称提供了小写版本,并将读者设置为保留大小写,但它本身是非标准的.我自己从未使用过,所以我不确定实际应用的注意事项.
控制阅读器的另一种方法是通过阅读器宏.Common Lisp已经有一个读取器宏,它实现了区分大小写的字符串的语法:双引号.如果不知道为什么不仅仅使用它,很难提供更多的建议.