I would like to concatenate a string (e.g. "abc") and a list (e.g. '(aa bb)) so as to obtain "abc aa bb".
Asked
Active
Viewed 1,942 times
1
3 Answers
5
AFAIK the canonical way to turn a list into a string is with mapconcat
, e.g.
(defun concat-string-list (str xs)
(concat str " "
(mapconcat #'symbol-name xs " ")))

Stefan
- 26,404
- 3
- 48
- 85
-
-
1
-
why do I get
mapconcat: Wrong type argument: symbolp, "my string"
but works witheval
? it's lexical binding? – Muihlinn May 06 '20 at 15:59 -
@Muihlinn: No. [ Given the lack of details you give, I can't give much more details either. ] – Stefan May 06 '20 at 17:36
-
oh, just realized that it's a list of symbols, not a list of strings as I thought first and couldn't see beyond that for a while.. – Muihlinn May 07 '20 at 07:02
3
Does the content of the list always consist of symbols like that? If you just want the string representation of the content of the list (i.e. the printed list without the parens) you could do something like:
(let* ((my/str "abc ")
(my/list '(aa bb)))
(concat
my/str
(substring (format "%s" my/list) 1 -1)))
;; "abc aa bb"

ebpa
- 7,449
- 29
- 55
1
This is another method that assumes the list always contains symbols. It uses #'symbol-name
to convert each symbol to a string.
ELISP> (defun string-and-list-separated-by-space (string lst)
(string-join (cons string
(mapcar #'symbol-name
lst))
" "))
string-and-list-separated-by-space
ELISP> (string-and-list-separated-by-space "abc" '(aa bb))
"abc aa bb"

zck
- 9,092
- 2
- 33
- 65
(let ((some_list '(aa bb))) (cons "abc " some_list))
but it returns("abc " aa bb)
– Francesco Cadei Oct 16 '18 at 20:08aa
andbb
? symbols will be'aa
and'bb
. strings will be"aa"
and"bb"
. are they vars? – manandearth Oct 16 '18 at 20:24