Просто посмотрите на то, что вы получаете, когда вводите в буквальном смысле ((A . B) . (C . D))
:
* '((a . b) . (c . d))
((A . B) C . D)
Существует определенный алгоритм , который принтер Lisp использует для распечатки структур данных, построенных из пар. По сути, вы никогда не сможете получить "минусы", которые будут напечатаны в виде скобок в скобках, когда это CDR другого минуса.
Тем не менее, можно переконфигурировать принтер так, чтобы вы получили требуемое поведение, с помощью 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))
Хотя, несмотря на это, откровенно говоря, было бы лучше в долгосрочной перспективе, если бы вы научились читать поведение по умолчанию.