In general, ! is used with procedures that mutate "previously allocated locations" (variables or Scheme data structures), but not external things like files. Environment variables are borderline: they're not actually *exposed* as Scheme data, but they are definitely in-process data. The case could go either way.In my TerminalsCowan and GraphicsCanvas pre-SRFIs, I do use ! for changing things, perhaps wrongly.