0

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

  • I have tried (let ((some_list '(aa bb))) (cons "abc " some_list)) but it returns ("abc " aa bb) – Francesco Cadei Oct 16 '18 at 20:08
  • what are aa and bb? symbols will be 'aa and 'bb. strings will be "aa" and "bb". are they vars? – manandearth Oct 16 '18 at 20:24
3

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 " ")))
  • Why #? is not it a symbol? – Francesco Cadei Oct 16 '18 at 22:34
  • M-x elisp-index-search RET #' RET – phils Oct 16 '18 at 23:00
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, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.