; reverse string ignoring special characters (define (string-reverse! str) (let loop ((lo 0) (hi (- (string-length str) 1))) (cond ((<= hi lo) str) (else (let ((t (string-ref str lo))) (string-set! str lo (string-ref str hi)) (string-set! str hi t) (loop (+ lo 1) (- hi 1))))))) (display (string-reverse! "a!b3c")) (newline) (define (string-reverse! str) (let loop ((lo 0) (hi (- (string-length str) 1))) (cond ((<= hi lo) str) ((not (char-alphabetic? (string-ref str lo))) (loop (+ lo 1) hi)) ((not (char-alphabetic? (string-ref str hi))) (loop lo (- hi 1))) (else (let ((t (string-ref str lo))) (string-set! str lo (string-ref str hi)) (string-set! str hi t) (loop (+ lo 1) (- hi 1))))))) (display (string-reverse! "a!b3c")) (newline)