Il y a plusieurs façons de le faire. La plus évidente est d'utiliser:
(define-struct thing (a b c) #:transparent)
ce qui rend la struct accessible pour le type d'inspection bas niveau que l'impression ne. Une autre alternative est d'utiliser votre propre imprimante:
(define-struct thing (a b c)
#:property prop:custom-write
(lambda (thing port write?)
(fprintf port (if write? "{~s,~s,~s}" "{~a,~a,~a}")
(thing-a thing) (thing-b thing) (thing-c thing))))
Mais notez que le style de sortie "constructeur" essaie d'écrire certaines choses différemment. Notez également que vous pouvez combiner ces deux éléments pour qu'ils aient leur propre auteur et qu'ils soient transparents. (Rendre transparent permet en principe à n'importe quel code d'accéder aux champs dans une instance thing
, par exemple, equal?
peut y creuser.)
Enfin, pour certaines utilisations, une installation plus adaptée consiste à utiliser «préfabriqué». struct:
(define-struct thing (a b c) #:prefab)
que se passe généralement est que chaque define-struct
génère un nouveau type, même si l'on était déjà défini. Mais avec une structure préfabriquée, c'est comme s'il y avait un type qui existait déjà et que vous liez simplement certaines fonctions (le constructeur, le prédicat et les accesseurs) pour travailler avec ce type préexistant.