Spomínam si, že som čítal niekde, že nie je makro a je zabudovaný do základného jazyka. Niečo takéto, nie som si istý, pretože si už nemôžem spomenúť, odkiaľ som si to prečítal. Takže je struct
makro v rakety alebo nie? Ak nie, prečo je zabudovaný do základného jazyka?
odpovede:
3 pre odpoveď č. 1Makro; struct.rkt
má
(define-syntax (struct stx)
(define (config-has-name? config)
(cond
[(syntax? config) (config-has-name? (syntax-e config))]
[(pair? config) (or (eq? (syntax-e (car config)) "#:constructor-name)
(eq? (syntax-e (car config)) "#:extra-constructor-name)
(config-has-name? (cdr config)))]
[else #f]))
(with-syntax ([orig stx])
(syntax-case stx ()
[(_ id super-id fields . config)
(and (identifier? #"id)
(identifier? #"super-id))
(if (not (config-has-name? #"config))
(syntax/loc stx
(define-struct/derived orig (id super-id) fields #:constructor-name id . config))
(syntax/loc stx
(define-struct/derived orig (id super-id) fields . config)))]
[(_ id fields . config)
(identifier? #"id)
(if (not (config-has-name? #"config))
(syntax/loc stx
(define-struct/derived orig id fields #:constructor-name id . config))
(syntax/loc stx
(define-struct/derived orig id fields . config)))]
[(_ id . rest)
(identifier? #"id)
(syntax/loc stx
(define-struct/derived orig id . rest))]
[(_ thing . _)
(raise-syntax-error #f
"expected an identifier for the structure type name"
stx
#"thing)]))))
V racket IDE môžete použiť Open Defining File
funkcia na vyhľadanie zdrojového kódu (ak je k dispozícii).
3 pre odpoveď č. 2
Vyzerá to, že som nesprávne pochopil otázku, keď som predtým odpovedal. Takže tu je odpoveď na otázku, ktorá bola určená:
Strukty sú vstavané a primitívne; podporujú implementáciu. V skutočnosti, okolo roku 2007, Matthew Flatt poznamenal, že v PLT schéme (ako raketa bola známa potom), v istom zmysle všetko je struct:
> Ut, 31. mája 2007 16:45:25 -0700, YC napísal:
> Zo zvedavosti - PLT schéma skutočne používa štruktúru ako základ
> zložený typ, t. j. implementovať uzáver / atď.Ako si o tom myslím, všetko je štruktúra, ale niektoré veci používajú a špeciálne znázornenie, pretože sú "dosť dôležité." (The extrémnym prípadom je fixnum).
Ale rovnako platná odpoveď by bola: nie, nie všetky typy zlúčenín používajú rovnaké zobrazenie ako hodnoty od konštruktora štruktúry.
-- zdroj.
0 pre odpoveď č. 3
Okrem použitej skvelej odpovede používam chcel dodať:
V dokumentácii o raketách má "modrá schránka" frázu v pravom hornom rohu, napríklad
procedure
alebosyntax
, prestruct
hovorísyntax
.Ak si myslíte, čo
struct
okrem iného definuje menované funkcie odvodené od názvu štruktúry. tak(struct foo (a b))
bude definovať afoo?
predikát a príslušenstvofoo-a
,foo-b
, Jednoduchá funkcia nemôže definovať nové pomenované veci ako je táto, takže musí byť makro.