; 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)
OyBzdW1taW5nIGEgc3RyaW5nCgooZGVmaW5lIChzdW0tc3RyaW5nIHN0cikKICAobGV0IGxvb3AgKChjcyAoc3RyaW5nLT5saXN0IHN0cikpIChjdXJyIDApIChzdW0gMCkpCiAgICAoY29uZCAoKG51bGw/IGNzKSAoKyBjdXJyIHN1bSkpCiAgICAgICAgICAoKGNoYXItbnVtZXJpYz8gKGNhciBjcykpCiAgICAgICAgICAgIChsb29wIChjZHIgY3MpCiAgICAgICAgICAgICAgICAgICgrICgqIGN1cnIgMTApCiAgICAgICAgICAgICAgICAgICAgIChjaGFyLT5pbnRlZ2VyIChjYXIgY3MpKQogICAgICAgICAgICAgICAgICAgICAoLSAoY2hhci0+aW50ZWdlciAjXDApKSkKICAgICAgICAgICAgICAgICAgc3VtKSkKICAgICAgICAgICgocG9zaXRpdmU/IGN1cnIpCiAgICAgICAgICAgIChsb29wIChjZHIgY3MpIDAgKCsgY3VyciBzdW0pKSkKICAgICAgICAgIChlbHNlIChsb29wIChjZHIgY3MpIDAgc3VtKSkpKSkKCihkaXNwbGF5IChzdW0tc3RyaW5nICIxMjNhYmM0NWRlZiIpKSAobmV3bGluZSkKKGRpc3BsYXkgKHN1bS1zdHJpbmcgIjEyM2FiYzQ1IikpIChuZXdsaW5lKQooZGlzcGxheSAoc3VtLXN0cmluZyAiYWJjMTIzZGVmNDVnaGkiKSkgKG5ld2xpbmUpCihkaXNwbGF5IChzdW0tc3RyaW5nICJhYmNkZSIpKSAobmV3bGluZSk=