1

I would like to concatenate a string (e.g. "abc") and a list (e.g. '(aa bb)) so as to obtain "abc aa bb".

2
  • I have tried (let ((some_list '(aa bb))) (cons "abc " some_list)) but it returns ("abc " aa bb) Commented Oct 16, 2018 at 20:08
  • what are aa and bb? symbols will be 'aa and 'bb. strings will be "aa" and "bb". are they vars? Commented Oct 16, 2018 at 20:24

3 Answers 3

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 " ")))
5
  • Why #? is not it a symbol? Commented Oct 16, 2018 at 22:34
  • 1
    M-x elisp-index-search RET #' RET Commented Oct 16, 2018 at 23:00
  • why do I get mapconcat: Wrong type argument: symbolp, "my string" but works with eval ? it's lexical binding? Commented May 6, 2020 at 15:59
  • @Muihlinn: No. [ Given the lack of details you give, I can't give much more details either. ] Commented May 6, 2020 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.. Commented May 7, 2020 at 7: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"
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"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.