I think that's because on works like this: (for index 0 (- len.foo 1) ...)
Because the hash table you used didn't have any entries for 0 or 1, it gave nil. arc> (= a (table))
#hash()
arc> a!foo
nil
arc> (= a!foo 'bar)
bar
arc> a!foo
bar
arc> a.0
nil
-----