I need to write a function that will concatenate a list into a string. example:
(concatString (quote (“hello” ” world”))) ==> “hello world”
here is what i have so far:
(defun concatString (list)
"A non-recursive function that concatenates a list of strings."
(cond
((not (listp list))
(princ "Error: argument to concatNR must be a list")(terpri) ())) ; check if parameter is a list
(if (not (null list)) ;check if list is not null
(let ((result (car list)))
(dolist (item (cdr list))
(if (stringp item)
(setq result (concatenate result item)))
)
)
)
)
I’m getting a “Error: “hello” is and illegal type specifier” message when i try to run it. I’ve tried a bunch of ways to modify this function and i havent been able to figure it out. does anyone have any ideas?
concatenaterequires a sequence type specifier as its second argument. To concatenate two strings, you should callconcatenateas:Another bug in your code: you do not make sure that the
carof the list is a string before assigning it toresult. By fixing your code, I came up with the following implementation:The following redefinition of
concatStringis more efficient as it does not create many intermediary string objects: