Вы не можете использовать syntax-local-value
и extract-struct-info
во время выполнения. Вместо этого вы должны использовать внутреннюю структуру struct introspection.
Если вы сделаете вашу структуру прозрачной, как это:
(struct point [x y] #:transparent)
затем вы можете получить аналогичные значения из точечного экземпляра, используя struct-info
и struct-type-info
:
(define a-point (point 3 4))
(define-values (type skipped?) (struct-info a-point))
;; type = #<struct-type:point>, skipped = #f
(define-values (name inits autos acc mut imms super super-skipped?)
(struct-type-info type))
(acc a-point 0) ;; => 3
Значение type
выше совпадает с struct:point
(неявно определенным определением структуры), поэтому, если вы знаете, что имеете дело именно с точечной структурой, вы можете использовать ее вместо этого. Вам все еще нужен #:transparent
(или вам нужен достаточно мощный инспектор), чтобы использовать struct-type-info
.