(defun join-strings (list)
(let* ((length (reduce #'+ list :key #'length))
(result (make-string length)))
(loop
for string in list
for start = 0 then end
for end = (+ start (length string))
while string
do (replace result string :start1 start :end1 end)
finally (return result))))Source Context