В Racket это выдает ошибку:
(struct point-in-plane (pos_x pos_y))
(struct pixel point-in-plane (color))
(define a-pixel (pixel 1 2 "blue"))
(pixel-color a-pixel)
(pixel-pos_x a-pixel)
(pixel-pos_y a-pixel)
Чтобы это работало, мне нужно заменить две последние строки на:
(point-in-plane-pos_x a-pixel)
(point-in-plane-pos_y a-pixel)
Аналогично в R6RS
#!r6rs
(import (rnrs))
(define-record-type point (fields x y))
(define-record-type cpoint (parent point) (fields color))
(define blue-point (make-cpoint 1 2 "blue"))
(write (cpoint-x blue-point))
выдает похожую ошибку.
По какой причине Scheme (и Racket) не позволяют вам получить доступ к полям подтипа, которые были определены в родительском элементе с помощью:
subtypeID-fieldID вместо идентификатора parenttypeID-fieldID
т.е. в моем случае позволяет мне использовать pixel-pos_x и pixel-pos_y.