我正在尝试使用
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
的问题。有什么建议么?谢谢!
'(p ".rnc")
了解
'...
的意思是 (quote ...)
不是制作列表的简写是非常重要的。
这是一种导致 lisp 返回的形式,未评估,由 lisp 阅读器创建的对象。
在这种情况下,lisp 阅读器返回一个包含符号
p
和字符串 ".rnc"
的列表——而符号 p
确实不是一个序列(因此你的错误)。
使用
(list p ".rnc")
创建一个列表,使用p
的evaluated值作为变量。
string-join
接受一系列字符串并使用分隔符将它们连接在一起,因此即使参数是正确的,如果您只传递一个字符串和一个分隔符,它也不会执行您想要的操作,因为在那种情况下它只返回字符串,因为没有什么可加入的。此外,dolist
将默认返回 nil
,这使得收集结果比必要的更困难。
使用
mapcar
代替,因为它会返回结果列表,并使用concat
添加后缀:
(mapcar (lambda (s) (concat s ".rnc")) '("a" "b" "c"))
评估结果:
("a.rnc" "b.rnc" "c.rnc")