【问题标题】:prefix symbol sequence in lisplisp中的前缀符号序列
【发布时间】:2021-12-19 21:57:46
【问题描述】:

我正在尝试用 lisp 中的前缀扩展符号序列:

(A B C) => (pfx:A pfx:B pfx:C)

为了做到这一点,我正在尝试以下方法:

(mapcar (lambda (arg) (concatenate 'pfx: arg) ) '(a b))

但无济于事。

谁能给我一个提示?

谢谢, 丹尼尔

【问题讨论】:

  • 你在尝试使用包吗?
  • CONCATENATE 不适用于符号。不过,它适用于字符串。
  • 我正在尝试让 ox-taskjuggler 工作。有一个变量保存适用的组织模式符号的有效符号,但根据您的设置,它们需要加上前缀才能正确导出。当然,如果这是通过函数而不是显式完成的话,那就太好了。

标签: lisp common-lisp symbols


【解决方案1】:

要在包中创建符号,请使用INTERN 函数:

(mapcar (lambda (arg) (intern (symbol-name arg) 'pfx)) '(a b))

这假设您已经创建了 PFX 包。

【讨论】:

  • 错误:a 不是字符串。
  • 需要调用SYMBOL-NAME获取符号名称。
  • @Barmar,这只是部分工作:我需要 (pfx:A pfx:B) 作为输出。实习生函数将使用双冒号创建:(pfx::A pfx::B)。或者, (intern(concatenate 'string "pfx:" "A")) 将创建 |pfx:A|。有什么东西可以创造 (pfx:A pfx:B) 吗?
  • 您需要导出符号以使用单冒号打印。
  • 管道不是符号名称的一部分。它们只是在印刷表示中使用,表示符号名称中包含特殊字符。
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多