The write function is inconsistent about whether it distinguishes between #nil and ():
scheme@(guile-user)> '(#nil . a) $1 = (#nil . a) scheme@(guile-user)> '(a . #nil) $2 = (a) Thee latter behaviour, emitting #nil as if it were (), breaks the usual write/read round-tripping, and the traditional correspondence between equal? and matching of written representation. Admittedly those standards are not absolute, nor is the extent to which they're expected to hold documented, but #nil is clearly sufficiently atomic to be the kind of value to which one would expect them to apply. For these reasons, if a consistent behaviour is to be chosen, I think it should be to consistently distinguish the values. I think the behaviour should be consistent. The values should be distinguished or not without regard to the context in which they arise within an s-expression. Whatever is done, even if it's to endorse the inconsistency, the behaviour should be documented, with rationale. -zefram