Basta con mirar lo que recibe cuando se introduce en un literal ((A . B) . (C . D))
:
* '((a . b) . (c . d))
((A . B) C . D)
Hay una defined algorithm la impresora Lisp utiliza para imprimir estructuras de datos construidas a partir de pares. Básicamente, nunca se puede obtener un inconveniente que se imprima como un par de puntos dentro de paréntesis cuando es el CDR de otro inconveniente.
Sin embargo, es posible volver a configurar la impresora de modo que se obtiene el comportamiento que está buscando, a través de SET-PPRINT-DISPATCH:
(set-pprint-dispatch 'cons
(lambda (stream object)
(format stream "(~W . ~W)" (car object) (cdr object))))
* '((a . b) . (c . d))
((A . B) . (C . D))
* (cons (cons 'a 'b) (cons 'c 'd)) ;The same object
((A . B) . (C . D))
Aunque, a pesar de que sería francamente ser mejor en el largo plazo si te sientes cómodo leyendo el comportamiento predeterminado.
El segundo se parece a lo que desea. ¿De qué manera no es adecuado? –
@Anon: El segundo no tiene el punto medio. En realidad, es un valor diferente, porque hay una nula (lista vacía) allí. –