Exercise 1.28 in Guile Scheme