/ / Je štruktúra makra v rakety? - raketa

Je struct makro v rakety? - raketa

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ď č. 1

Makro; struct.rkt

(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.

Začiatok vlákna.


0 pre odpoveď č. 3

Okrem použitej skvelej odpovede používam chcel dodať:

  1. V dokumentácii o raketách má "modrá schránka" frázu v pravom hornom rohu, napríklad procedure alebo syntax, pre struct hovorí syntax.

  2. 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ť a foo? predikát a príslušenstvo foo-a, foo-b, Jednoduchá funkcia nemôže definovať nové pomenované veci ako je táto, takže musí byť makro.