I thought it odd that: guile> (string-length "") 0 guile> (string-ref "" 3) #\nul
but: guile> (string-set! "" 123 #\a) guile> (string-ref "" 123) #\a guile> (substring "" 123 124) Backtrace: In standard input: 6: 0* [substring "" {123} 124] standard input:6:1: In procedure substring in expression (substring "" 123 ...): standard input:6:1: Value out of range 0 to 0: 123 ABORT: (out-of-range)