a bit of a cleanup pasted by C-Keen on Mon Jan 23 18:01:49 2012

(define (combine-syms lst)
  (let loop ((l lst) (res '()))
    (cond ((null? l) (append-map symbol->string (reverse res)))
          ((symbol? (car l)) (loop (cdr l) (cons (car l) res)))
          (else (cons (string-intersperse (map symbol->string (reverse res))) l)))))

fixed anchor case pasted by C-Keen on Mon Jan 23 18:05:18 2012

(define (combine-syms lst)
  (let loop ((l lst) (res '()))
    (cond ((null? l) (string-intersperse (map symbol->string (reverse res))))
          ((symbol? (car l)) (loop (cdr l) (cons (car l) res)))
          (else (cons (string-intersperse (map symbol->string (reverse res))) l)))))

final added by C-Keen on Mon Jan 23 21:25:14 2012

(define (combine-syms lst)
  (let loop ((l lst) (res '()))
    (cond ((null? l) (string-intersperse (reverse res)))
          ((not (list? (car l)))
           (loop (cdr l) (cons (->string (car l)) res)))
          ((every (lambda (e) (not (number? e))) (car l))
           (loop (cdr l) (append (map ->string (car l)) res)))
          (else (cons (string-intersperse (reverse res)) l)))))