; summing a string (define (sum-string str) (let loop ((cs (string->list str)) (curr 0) (sum 0)) (cond ((null? cs) (+ curr sum)) ((char-numeric? (car cs)) (loop (cdr cs) (+ (* curr 10) (char->integer (car cs)) (- (char->integer #\0))) sum)) ((positive? curr) (loop (cdr cs) 0 (+ curr sum))) (else (loop (cdr cs) 0 sum))))) (display (sum-string "123abc45def")) (newline) (display (sum-string "123abc45")) (newline) (display (sum-string "abc123def45ghi")) (newline) (display (sum-string "abcde")) (newline)