在 Emacs Lisp 中循环字符串会导致类型参数错误

e-e*_*ght 1 lisp emacs elisp list quote

我正在尝试使用 循环遍历字符串列表dolist,并使用前缀字符串连接元素,使用string-joinfromsubr-x创建新字符串。

(dolist (p '("a" "b" "c"))
   (string-join '(p ".rnc")))
Run Code Online (Sandbox Code Playgroud)

我收到错误Wrong type argument: sequencep, p。但是下面的代码可以工作。

(dolist (p '("a" "b" "c"))
   (print p))
Run Code Online (Sandbox Code Playgroud)

所以这似乎是一个循环的问题string-join或等效的mapconcat循环内的问题。有什么建议么?谢谢!

phi*_*ils 5

'(p ".rnc")
Run Code Online (Sandbox Code Playgroud)

理解“ '...which”(quote ...)并不是制作列表的简写,这一点非常重要。

它是一种使 lisp 返回由 lisp 读取器创建的对象(未计算)的形式。

在这种情况下,lisp 阅读器返回一个包含符号p和字符串的列表".rnc"——而符号p确实不是一个序列(因此你的错误)。

用于使用 的评估值作为变量来(list p ".rnc")创建列表。p


ps 请务必回顾一下 lisp 执行的不同特征readeval阶段。一旦你理解了其中的区别,quote就会变得更有意义。