Wystarczy spojrzeć na to, co dostajesz z powrotem, kiedy wchodzi w dosłownym ((A . B) . (C . D))
:
* '((a . b) . (c . d))
((A . B) C . D)
Jest defined algorithm Lisp drukarka używa do druku poza strukturami danych zbudowanymi z par. Zasadniczo, nigdy nie można uzyskać wad, które będą drukowane w postaci kropkowanej pary w nawiasach, gdy jest to CDR innych wad.
Jednak możliwe jest, aby ponownie skonfigurować drukarkę tak, aby uzyskać zachowanie, którego szukasz, poprzez 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))
Chociaż mimo że byłoby to szczerze być lepiej w długi czas, jeśli masz komfort z odczytaniem domyślnego zachowania.
Drugi wygląda to, co chcesz. W jaki sposób nie jest odpowiedni? –
@Anon: Drugi nie ma środkowej kropki. W rzeczywistości jest to inna wartość, ponieważ istnieje tam zerowa (pusta lista). –