Hi Théo, I don't know whether there are any firm guarantees about that behaviour, but functionally it's safe to rely on, yes. That idiom you mentioned is pretty handy, I use it myself sometimes.
Under the hood, #!optional arguments are expanded in a let*-style binding form (as opposed to a "normal" let binding, where they wouldn't see one another), so later values can refer to earlier ones. Cheers, Evan