In some cases, it is useful to call a procedure with guaranteed left-to-right evaluation order. For example, when calling a record constructor with data read from a port, order matters. Often the fields are in the same order as in the file, so no reshuffling is required. Therefore, the usual approach of introducing names and ordering via let*
is a bit burdensome.
Is there some ready-made syntax in the standard library that provides this functionality? Basically, instead of (f a b c)
, I expected to write something like (ordered f a b c)
, which is translated into
(let* ((t0 f)
(t1 a)
(t2 b)
(t3 c))
(t0 t1 t2 t3))
with new symbols t0
to t3
.
Your proposed situation is not nearly common enough to be enshrined as a feature in the standard library, especially given that the workaround with let*
is so simple. Additionally, the language empowers you to easily give yourself this feature, with its macro-writing facilities, which means there's even less reason it should be in the standard library. If you find yourself needing to do this a lot, write a macro as part of your library.