Betrachten Sie einfach, was Sie zurück erhalten, wenn Sie in einem wörtlichen ((A . B) . (C . D))
eingeben:
* '((a . b) . (c . d))
((A . B) C . D)
Es gibt eine defined algorithm ist der Lisp-Drucker zum Drucken verwendet out Datenstrukturen aus Paaren aufgebaut. Grundsätzlich kann man nie einen Minuspunkt als gepunkteten Strich in Klammern angeben, wenn es sich um den CDR eines anderen Kontras handelt.
Allerdings ist es möglich, den Drucker neu zu konfigurieren, so dass Sie das Verhalten erhalten Sie suchen, über 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))
Obwohl trotz, dass es offen in die besser wäre, Langlauf, wenn Sie sich mit dem Standardverhalten vertraut gemacht haben.
Die zweite sieht aus wie, was Sie wollen. Inwiefern ist es nicht geeignet? –
@Anon: Die zweite hat nicht den mittleren Punkt. Es ist eigentlich ein anderer Wert, weil dort eine Null (leere Liste) ist. –