Hi Nico,

Thank you again for your detailed responses. I'm just getting back into the office. I do appreciate your taking the time to analyze my code.

Your for loop to replace my recursive apparatus taught me two things: I was previously unfamiliar with the at clause in the for loop, and I didn't know the idiv operator before. Thank you!

Regarding the signature for map:merge(): Ouch! I have used that function many times. I should have known better.

Thank you also for the advice on using the for loop instead of the recursive approach.

Regarding

  return
    (: base case: each value except the last should have 100 items
       in it; the last should have <= 100; in this case we return the map
       goal is to build a map with 63 keys, with each value
       a sequence of 100 or 93 (in the last case) strings :)
    if ((($key_count + 1) * 100) >= count($pmids))
      then $pmid_map

I thought because I was multiplying $key_count + 1, rather than $key_count, by 100, the condition would be true after the last 93 elements of the sequence. I thought there would be 63 key/value pairs after the final 93 are added, so the base case would be triggered by

(63 + 1) * 100 >= 6293

Perhaps I'm off by one. Though I've abandoned the recursive function altogether in favor of your for loop.

Again thanks,
Chuck