我想构建一个宏,它根据具有根字符串的符号定义多个类和方法(我想这在 lisp 中并不罕见 ^^)。
虚拟示例:
(defmacro define-my-stuff (term)
会做这样的事情
defclass my-super-term-class
defvar *term-variable*
defun do-term ((a-thing *example-term*))
带有建立在“term”宏参数之上的符号
如何处理不同的 readtable-case 以便代码可以普遍用于四种不同类型的情况 (:UPCASE :DOWNCASE :PRESERVE :INVERT)。
我希望能够从源代码中使用这些符号。所以我希望在宏中创建的符号由 lisp 系统使用的读者可读大小写规则构建。
(常规是 :UPCASE 但有些使用 :DOWNCASE 例如)。
我发现做这样的事情的唯一方法是使用 READ-FROM-STRING
函数(例如:(read-from-string(连接“term”“-variable” ))
但这也会将符号实习为副作用。
那么我应该如何计算一个遵循 readtable-case 规则的符号而不对其进行驻留呢?
在 common-lisp 包中有这个功能吗?
最佳答案
您可以使用一个未实习的符号作为字符串指示符:
(string '#:Foo)
=> "FOO"
or=> "foo"
or=> "Foo"
or=> "fOO"
关于common-lisp - 在宏中构建符号时处理可读的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59090327/