schemeのdatum label

datum labelを使うとschemeの循環構造を表記できる。

(define x (list 1 2 3 ))
(set-cdr! (cddr x) x)
;#0=(1 2 3 . #0#)

(define y (list 4 x 6))
(set-cdr! (cddr y) y)
;#0=(4 #1=(1 2 3 . #1#) 6 . #0#)


(define z (quote #0=(1 2 . #0#)))
;#0=(1 2 . #0#)