それにはいくつかの方法があります。最も明白なものは使用することです:
(define-struct thing (a b c) #:transparent)
これにより、出力が行うような低レベルの検査のために構造体にアクセスできるようになります。もう 1 つの方法は、独自のプリンターを使用することです。
(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))))
ただし、「コンストラクター」出力スタイルでは、いくつかのことを別の方法で記述しようとすることに注意してください。また、これらの両方を組み合わせて、独自のライターを持ち、透過的にすることもできます。(透明にするということは、基本的には、任意のコードがインスタンス内のフィールドにアクセスできるようにすることです。thing
たとえば、インスタンスequal?
を掘り下げることができます。)
最後に、一部の用途では、「プレハブ」構造体を使用する方が適切な機能があります。
(define-struct thing (a b c) #:prefab)
通常define-struct
、既に定義されている場合でも、それぞれが新しい型を生成します。しかし、プレハブ構造体を使用すると、既存の型が 1 つあり、この既存の型を操作するためにいくつかの関数 (コンストラクター、述語、およびアクセサー) をバインドしているだけのようになります。