遍历字符串在 Emacs Lisp 中给出了错误的类型参数错误

问题描述 投票:0回答:2

我正在尝试使用

dolist
遍历字符串列表,并使用前缀字符串连接元素,使用
string-join
中的
subr-x
创建新字符串。

(dolist (p '("a" "b" "c"))
   (string-join '(p ".rnc")))

我收到错误

Wrong type argument: sequencep, p
。但是,以下代码有效。

(dolist (p '("a" "b" "c"))
   (print p))

所以这似乎是一个循环中的

string-join
或等价的
mapconcat
的问题。有什么建议么?谢谢!

emacs elisp
2个回答
1
投票
'(p ".rnc")

了解

'...
的意思是
(quote ...)
不是制作列表的简写是非常重要的。

这是一种导致 lisp 返回的形式,未评估,由 lisp 阅读器创建的对象。

在这种情况下,lisp 阅读器返回一个包含符号

p
和字符串
".rnc"
的列表——而符号
p
确实不是一个序列(因此你的错误)。

使用

(list p ".rnc")
创建一个列表,使用p
evaluated
值作为变量。


1
投票

string-join
接受一系列字符串并使用分隔符将它们连接在一起,因此即使参数是正确的,如果您只传递一个字符串和一个分隔符,它也不会执行您想要的操作,因为在那种情况下它只返回字符串,因为没有什么可加入的。此外,
dolist
将默认返回
nil
,这使得收集结果比必要的更困难。

使用

mapcar
代替,因为它会返回结果列表,并使用
concat
添加后缀:

(mapcar (lambda (s) (concat s ".rnc")) '("a" "b" "c"))

评估结果:

("a.rnc" "b.rnc" "c.rnc")
© www.soinside.com 2019 - 2024. All rights reserved.