(define (transform lst) (define (prefix x) (map (lambda (y) (if (pair? (car y)) (cons (append (car x) (car y)) (cdr y)) (append (car x) y))) (cdr x))) (reverse! (let loop ((lst lst) (result '())) (if (null? lst) result (let ((x (car lst))) (if (pair? (car x)) (loop (append (prefix x) (cdr lst)) result) (loop (cdr lst) (cons x result))))))))