gpt4 book ai didi

common-lisp - 在宏中构建符号时处理可读的情况

转载 作者:行者123 更新时间:2023-12-04 16:46:16 24 4
gpt4 key购买 nike

我想构建一个宏,它根据具有根字符串的符号定义多个类和方法(我想这在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com