(index ("define-record" 0) ("define-record-type" 689) ("defstruct" 1217))
(def (sig (syntax "(define-record NAME SLOT ...)" (id define-record))) (p "Equivalent to " (tt "define-record") " where " (tt "SLOT") " slot may optionally be of the form") (pre " (SLOTNAME : TYPE)") (p "or") (pre " ((setter SLOTNAME) : TYPE)") (p (tt "define-record") " adds the following type-declarations:") (highlight scheme "(: make-NAME (TYPE1 ... -> (struct NAME)))\n(: NAME? (* -> boolean : (struct NAME)))\n(: NAME-SLOTNAME ((struct NAME) -> TYPE))\n(: NAME-SLOTNAME-set! ((struct NAME) TYPE -> undefined))") (p "Additionally, specializations are enabled that rewrite slot-accessors to very efficient code, if the compiler can prove that the arguments are of the correct type."))
(def (sig (syntax "(define-record-type NAME (CTOR FIELDNAME ...) PRED FIELD ...)" (id define-record-type))) (p "Defines a SRFI-9 record type. FIELD may be any of") (pre " (FIELDNAME GETTER)\n (FIELDNAME GETTER : TYPE)\n (FIELDNAME GETTER SETTER)\n (FIELDNAME GETTER SETTER : TYPE)") (p "Declares:") (highlight scheme "(: CTOR (TYPE1 ... -> (struct NAME)))\n(: PRED (* -> boolean : (struct NAME)))\n(: GETTER ((struct NAME) -> TYPE))\n(: SETTER ((struct NAME) TYPE -> undefined))") (p "Specializations are added here as well."))
(def (sig (syntax "(defstruct NAME SLOT ...)" (id defstruct))) (p "Alternative form of " (tt "defstruct") ". " (tt "SLOT") " may be any of") (pre " SLOTNAME \n (SLOTNAME DEFAULT)\n (SLOTNAME : TYPE)\n ((SLOTNAME DEFAULT) : TYPE)") (p "Declares:") (highlight scheme "(: make-NAME (#!rest * -> (struct NAME)))\n(: NAME? (* -> boolean : (struct NAME)))\n(: NAME-SLOTNAME ((struct NAME) -> TYPE))\n(: NAME-SLOTNAME-set! ((struct NAME) TYPE -> undefined))\n(: set-NAME! ((struct name) #!rest * -> (struct name)))\n(: update-NAME ((struct name) #!rest * -> (struct name)))") (p "Adds specializations as appropriate."))
