Try removing the quotes around the calls to the _ procedure. I don't think you need them there, it should be substituting the results of the procedure call at the correct level from what I can see.
The doesn't work, because the form generator does a [lindex $string 1] on the string; removing the quotes will make that return the second word instead of the number.
This why I tried to convert it into [list ... ], but it doesn't work either :/