20 lines
588 B
Racket
20 lines
588 B
Racket
#lang racket/base
|
|
|
|
(define (copy-struct str)
|
|
(define-values (str-struct-info _) (struct-info str))
|
|
(define str-maker (struct-type-make-constructor str-struct-info))
|
|
(apply str-maker (cdr (vector->list (struct->vector str)))))
|
|
|
|
(struct point (x y) #:transparent)
|
|
(struct point/color point (color) #:transparent)
|
|
|
|
(let* ([original (point 0 0)]
|
|
[copied (copy-struct original)])
|
|
(displayln copied)
|
|
(displayln (eq? original copied)))
|
|
|
|
(let* ([original (point/color 0 0 'black)]
|
|
[copied (copy-struct original)])
|
|
(displayln copied)
|
|
(displayln (eq? original copied)))
|