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.

On Fri, Dec 6, 2019 at 8:53 AM Lassi Kortela <xxxxxx@lassi.io> wrote:
> I agree with the name set-environment-variable! (with a ! character),
> and I prefer a separate delete-environment-variable!.

What's the principle by which the "!" suffix is used with procedures
that don't mutate Scheme variables? "delete-file" does not end with "!"