http://www.lispworks.com/documentation/HyperSpec/Body/f_firs...
https://docs.racket-lang.org/reference/mpairs.html
Moreover, "a mutable pair is not a pair; they are completely separate datatypes".
So, I think, you can't make a piece of syntax out of these and pass them to the evaluator or compiler.
So, this doesn't even give a tip of the hat to the tradition of Barbara Liskov's substitution principle where you'd expec that a "mutable pair" is-a kind-of "pair", and so on.
And it also means that more things than lists can be accessed as sequences using iterators.
The whole "Have to recurse the entire chain to figure out if something is terminated with nil/() and therefore a list" is part of the reason why everybody bangs on about tail recursion instead of just writing an imperative loop.
To be fair, Racket and LISP do have the procedures `first` and `last` for accessing lists, but also keeps `car` and `cdr` for accessing either pairs or lists. Clojure did away with `car` and `cdr`, but it also did away with the ability to make plain pairs from `cons`.
Racket:
Clojure: https://docs.racket-lang.org/reference/pairs.html