Artifact
13594f9d2181f6b4db9d99f89c34aa23eb0913ce:
Wiki page
[record properties] by
murphy
2015-02-06 01:23:28.
0000: 44 20 32 30 31 35 2d 30 32 2d 30 36 54 30 31 3a D 2015-02-06T01:
0010: 32 33 3a 32 38 2e 36 36 39 0a 4c 20 72 65 63 6f 23:28.669.L reco
0020: 72 64 5c 73 70 72 6f 70 65 72 74 69 65 73 0a 50 rd\sproperties.P
0030: 20 31 32 64 35 61 62 31 35 35 61 63 64 65 63 36 12d5ab155acdec6
0040: 34 38 36 61 66 66 31 39 62 38 37 38 38 62 38 32 486aff19b8788b82
0050: 32 33 31 66 64 30 31 31 35 0a 55 20 6d 75 72 70 231fd0115.U murp
0060: 68 79 0a 57 20 32 36 34 32 0a 3c 68 31 3e 52 65 hy.W 2642.<h1>Re
0070: 63 6f 72 64 20 50 72 6f 70 65 72 74 69 65 73 3c cord Properties<
0080: 2f 68 31 3e 0d 0a 0d 0a 52 65 63 6f 72 64 20 70 /h1>....Record p
0090: 72 6f 70 65 72 74 69 65 73 20 61 72 65 20 61 20 roperties are a
00a0: 77 61 79 20 74 6f 20 61 74 74 61 63 68 20 61 72 way to attach ar
00b0: 62 69 74 72 61 72 79 20 69 6e 66 6f 72 6d 61 74 bitrary informat
00c0: 69 6f 6e 20 74 6f 20 72 65 63 6f 72 64 0d 0a 74 ion to record..t
00d0: 79 70 65 73 20 61 6e 64 2f 6f 72 20 69 6e 73 74 ypes and/or inst
00e0: 61 6e 63 65 73 2e 20 54 68 65 20 69 6e 74 65 72 ances. The inter
00f0: 66 61 63 65 20 74 6f 20 72 65 63 6f 72 64 20 70 face to record p
0100: 72 6f 70 65 72 74 69 65 73 20 68 61 73 20 74 68 roperties has th
0110: 72 65 65 0d 0a 70 61 72 74 73 3a 0d 0a 0d 0a 20 ree..parts:....
0120: 20 2a 20 20 54 68 65 20 6d 6f 64 75 6c 65 20 3c * The module <
0130: 74 74 3e 73 72 66 69 2d 39 39 2d 72 65 63 6f 72 tt>srfi-99-recor
0140: 64 73 2d 69 6e 73 70 65 63 74 69 6f 6e 3c 2f 74 ds-inspection</t
0150: 74 3e 20 65 78 70 6f 72 74 73 20 74 68 65 0d 0a t> exports the..
0160: 20 20 20 20 20 70 72 6f 63 65 64 75 72 65 20 3c procedure <
0170: 74 74 3e 6d 61 6b 65 2d 72 74 70 3c 2f 74 74 3e tt>make-rtp</tt>
0180: 20 74 68 61 74 20 63 72 65 61 74 65 73 20 6e 65 that creates ne
0190: 77 20 72 65 63 6f 72 64 20 70 72 6f 70 65 72 74 w record propert
01a0: 79 0d 0a 20 20 20 20 20 61 63 63 65 73 73 6f 72 y.. accessor
01b0: 73 2e 0d 0a 20 20 2a 20 20 41 20 70 72 6f 70 65 s... * A prope
01c0: 72 74 79 20 69 73 20 61 74 74 61 63 68 65 64 20 rty is attached
01d0: 74 6f 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 to a record type
01e0: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 using the speci
01f0: 61 6c 20 6b 65 79 77 6f 72 64 0d 0a 20 20 20 20 al keyword..
0200: 20 61 72 67 75 6d 65 6e 74 20 3c 74 74 3e 23 3a argument <tt>#:
0210: 70 72 6f 70 65 72 74 79 3c 2f 74 74 3e 20 6f 66 property</tt> of
0220: 20 3c 74 74 3e 6d 61 6b 65 2d 72 74 64 3c 2f 74 <tt>make-rtd</t
0230: 74 3e 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 t>, followed by
0240: 61 0d 0a 20 20 20 20 20 70 72 6f 70 65 72 74 79 a.. property
0250: 20 61 63 63 65 73 73 6f 72 20 67 65 6e 65 72 61 accessor genera
0260: 74 65 64 20 62 79 20 3c 74 74 3e 6d 61 6b 65 2d ted by <tt>make-
0270: 72 74 70 3c 2f 74 74 3e 20 61 6e 64 20 61 20 70 rtp</tt> and a p
0280: 72 6f 70 65 72 74 79 0d 0a 20 20 20 20 20 76 61 roperty.. va
0290: 6c 75 65 2e 0d 0a 20 20 2a 20 20 41 20 70 72 6f lue... * A pro
02a0: 70 65 72 74 79 20 69 73 20 61 63 63 65 73 73 65 perty is accesse
02b0: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 d by calling the
02c0: 20 70 72 6f 70 65 72 74 79 20 61 63 63 65 73 73 property access
02d0: 6f 72 20 67 65 6e 65 72 61 74 65 64 0d 0a 20 20 or generated..
02e0: 20 20 20 75 73 69 6e 67 20 3c 74 74 3e 6d 61 6b using <tt>mak
02f0: 65 2d 72 74 70 3c 2f 74 74 3e 20 6f 6e 20 61 20 e-rtp</tt> on a
0300: 72 65 63 6f 72 64 20 69 6e 73 74 61 6e 63 65 20 record instance
0310: 61 6e 64 2f 6f 72 20 61 20 72 65 63 6f 72 64 20 and/or a record
0320: 74 79 70 65 0d 0a 20 20 20 20 20 64 65 73 63 72 type.. descr
0330: 69 70 74 6f 72 2e 0d 0a 0d 0a 3c 68 32 3e 43 72 iptor.....<h2>Cr
0340: 65 61 74 69 6e 67 20 52 65 63 6f 72 64 20 50 72 eating Record Pr
0350: 6f 70 65 72 74 79 20 41 63 63 65 73 73 6f 72 73 operty Accessors
0360: 3c 2f 68 32 3e 0d 0a 0d 0a 41 20 72 65 63 6f 72 </h2>....A recor
0370: 64 20 70 72 6f 70 65 72 74 79 20 61 63 63 65 73 d property acces
0380: 73 6f 72 20 69 73 20 63 72 65 61 74 65 64 20 77 sor is created w
0390: 69 74 68 20 61 20 63 61 6c 6c 20 74 6f 20 3c 74 ith a call to <t
03a0: 74 3e 6d 61 6b 65 2d 72 74 70 3c 2f 74 74 3e 0d t>make-rtp</tt>.
03b0: 0a 6f 72 20 75 73 69 6e 67 20 74 68 65 20 73 68 .or using the sh
03c0: 6f 72 74 68 61 6e 64 20 73 79 6e 74 61 78 20 3c orthand syntax <
03d0: 74 74 3e 64 65 66 69 6e 65 2d 72 65 63 6f 72 64 tt>define-record
03e0: 2d 70 72 6f 70 65 72 74 79 3c 2f 74 74 3e 3a 0d -property</tt>:.
03f0: 0a 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 20 ...<verbatim>..
0400: 20 28 6d 61 6b 65 2d 72 74 70 20 5b 64 65 66 61 (make-rtp [defa
0410: 75 6c 74 20 61 6e 79 3f 20 23 66 5d 29 20 3d 3e ult any? #f]) =>
0420: 20 70 72 6f 63 65 64 75 72 65 3f 0d 0a 0d 0a 20 procedure?....
0430: 20 28 64 65 66 69 6e 65 2d 72 65 63 6f 72 64 2d (define-record-
0440: 70 72 6f 70 65 72 74 79 20 6e 61 6d 65 20 5b 64 property name [d
0450: 65 66 61 75 6c 74 20 61 6e 79 3f 20 23 66 5d 29 efault any? #f])
0460: 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 0d ..</verbatim>...
0470: 0a 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 .The result is a
0480: 20 70 72 6f 63 65 64 75 72 65 20 74 68 61 74 20 procedure that
0490: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 61 can be used to a
04a0: 63 63 65 73 73 20 74 68 65 20 6e 65 77 20 72 65 ccess the new re
04b0: 63 6f 72 64 0d 0a 70 72 6f 70 65 72 74 79 20 77 cord..property w
04c0: 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 64 65 ith the given de
04d0: 66 61 75 6c 74 20 76 61 6c 75 65 2e 0d 0a 0d 0a fault value.....
04e0: 3c 68 32 3e 41 63 63 65 73 73 69 6e 67 20 52 65 <h2>Accessing Re
04f0: 63 6f 72 64 20 50 72 6f 70 65 72 74 69 65 73 3c cord Properties<
0500: 2f 68 32 3e 0d 0a 0d 0a 41 20 72 65 63 6f 72 64 /h2>....A record
0510: 20 70 72 6f 70 65 72 74 79 20 61 63 63 65 73 73 property access
0520: 6f 72 20 61 63 63 65 70 74 73 20 74 77 6f 20 61 or accepts two a
0530: 72 67 75 6d 65 6e 74 73 2c 20 73 6f 6d 65 20 76 rguments, some v
0540: 61 6c 75 65 20 61 6e 64 20 61 0d 0a 72 65 63 6f alue and a..reco
0550: 72 64 20 74 79 70 65 20 64 65 73 63 72 69 70 74 rd type descript
0560: 6f 72 3a 0d 0a 0d 0a 3c 76 65 72 62 61 74 69 6d or:....<verbatim
0570: 3e 0d 0a 20 20 28 72 74 70 20 5b 76 20 61 6e 79 >.. (rtp [v any
0580: 3f 5d 20 5b 72 74 64 20 72 74 64 3f 20 28 72 65 ?] [rtd rtd? (re
0590: 63 6f 72 64 2d 72 74 64 20 76 29 5d 29 20 3d 3e cord-rtd v)]) =>
05a0: 20 61 6e 79 3f 0d 0a 3c 2f 76 65 72 62 61 74 69 any?..</verbati
05b0: 6d 3e 0d 0a 0d 0a 54 68 65 20 72 65 63 6f 72 64 m>....The record
05c0: 20 74 79 70 65 20 64 65 73 63 72 69 70 74 6f 72 type descriptor
05d0: 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 can be omitted
05e0: 69 66 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 if the value pas
05f0: 73 65 64 20 61 73 20 74 68 65 0d 0a 66 69 72 73 sed as the..firs
0600: 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e t argument is an
0610: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 61 20 74 instance of a t
0620: 72 61 6e 73 70 61 72 65 6e 74 20 72 65 63 6f 72 ransparent recor
0630: 64 2e 0d 0a 0d 0a 54 68 65 20 61 63 63 65 73 73 d.....The access
0640: 6f 72 20 6c 6f 6f 6b 73 20 75 70 20 74 68 65 20 or looks up the
0650: 70 72 6f 70 65 72 74 79 20 76 61 6c 75 65 20 66 property value f
0660: 6f 72 20 74 68 65 20 67 69 76 65 6e 20 72 65 63 or the given rec
0670: 6f 72 64 20 74 79 70 65 20 28 6f 72 0d 0a 61 6e ord type (or..an
0680: 79 20 6f 66 20 69 74 73 20 70 61 72 65 6e 74 73 y of its parents
0690: 29 20 77 68 65 6e 20 69 74 20 69 73 20 63 61 6c ) when it is cal
06a0: 6c 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73 6e led. If it doesn
06b0: 27 74 20 66 69 6e 64 20 61 20 76 61 6c 75 65 20 't find a value
06c0: 69 74 0d 0a 72 65 73 6f 72 74 73 20 74 6f 20 74 it..resorts to t
06d0: 68 65 20 64 65 66 61 75 6c 74 20 73 70 65 63 69 he default speci
06e0: 66 69 65 64 20 77 68 65 6e 20 74 68 65 20 72 65 fied when the re
06f0: 63 6f 72 64 20 70 72 6f 70 65 72 74 79 20 77 61 cord property wa
0700: 73 20 63 72 65 61 74 65 64 2e 0d 0a 54 68 65 20 s created...The
0710: 76 61 6c 75 65 20 69 73 20 74 68 65 6e 20 61 70 value is then ap
0720: 70 6c 69 65 64 20 74 6f 20 3c 74 74 3e 76 3c 2f plied to <tt>v</
0730: 74 74 3e 20 74 6f 20 6f 62 74 61 69 6e 20 74 68 tt> to obtain th
0740: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0d e result of the.
0750: 0a 61 63 63 65 73 73 6f 72 20 63 61 6c 6c 2e 0d .accessor call..
0760: 0a 0d 0a 44 65 66 61 75 6c 74 20 70 72 6f 70 65 ...Default prope
0770: 72 74 79 20 76 61 6c 75 65 73 20 70 61 73 73 65 rty values passe
0780: 64 20 74 6f 20 3c 74 74 3e 6d 61 6b 65 2d 72 74 d to <tt>make-rt
0790: 70 3c 2f 74 74 3e 20 77 68 69 63 68 20 61 72 65 p</tt> which are
07a0: 20 6e 6f 74 0d 0a 70 72 6f 63 65 64 75 72 65 73 not..procedures
07b0: 20 61 72 65 20 69 6d 70 6c 69 63 69 74 6c 79 20 are implicitly
07c0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 70 72 6f converted to pro
07d0: 63 65 64 75 72 65 73 20 63 6f 6e 73 74 61 6e 74 cedures constant
07e0: 6c 79 20 72 65 74 75 72 6e 69 6e 67 0d 0a 74 68 ly returning..th
07f0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e e default value.
0800: 0d 0a 0d 0a 50 72 6f 70 65 72 74 79 20 76 61 6c ....Property val
0810: 75 65 73 20 70 61 73 73 65 64 20 74 6f 20 3c 74 ues passed to <t
0820: 74 3e 6d 61 6b 65 2d 72 74 64 3c 2f 74 74 3e 20 t>make-rtd</tt>
0830: 77 68 69 63 68 20 61 72 65 20 6e 6f 74 20 70 72 which are not pr
0840: 6f 63 65 64 75 72 65 73 0d 0a 6f 72 20 73 79 6d ocedures..or sym
0850: 62 6f 6c 73 20 61 72 65 20 69 6d 70 6c 69 63 69 bols are implici
0860: 74 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f tly converted to
0870: 20 63 6f 6e 73 74 61 6e 74 20 67 65 6e 65 72 61 constant genera
0880: 74 6f 72 73 20 6c 69 6b 65 0d 0a 70 72 6f 70 65 tors like..prope
0890: 72 74 79 20 64 65 66 61 75 6c 74 20 76 61 6c 75 rty default valu
08a0: 65 73 2e 20 53 79 6d 62 6f 6c 73 20 61 72 65 20 es. Symbols are
08b0: 69 6d 70 6c 69 63 69 74 6c 79 20 63 6f 6e 76 65 implicitly conve
08c0: 72 74 65 64 20 74 6f 20 61 63 63 65 73 73 6f 72 rted to accessor
08d0: 0d 0a 70 72 6f 63 65 64 75 72 65 73 20 66 6f 72 ..procedures for
08e0: 20 74 68 65 20 66 69 65 6c 64 20 6f 66 20 74 68 the field of th
08f0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 20 74 e same name in t
0900: 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 74 79 he new record ty
0910: 70 65 20 74 6f 0d 0a 77 68 69 63 68 20 74 68 65 pe to..which the
0920: 20 70 72 6f 70 65 72 74 79 20 69 73 20 61 74 74 property is att
0930: 61 63 68 65 64 2e 0d 0a 0d 0a 3c 68 32 3e 4c 69 ached.....<h2>Li
0940: 73 74 69 6e 67 20 52 65 63 6f 72 64 20 50 72 6f sting Record Pro
0950: 70 65 72 74 69 65 73 3c 2f 68 32 3e 0d 0a 0d 0a perties</h2>....
0960: 54 68 65 20 72 65 63 6f 72 64 20 70 72 6f 70 65 The record prope
0970: 72 74 69 65 73 20 61 74 74 61 63 68 65 64 20 64 rties attached d
0980: 69 72 65 63 74 6c 79 20 74 6f 20 61 20 74 79 70 irectly to a typ
0990: 65 20 64 65 73 63 72 69 70 74 6f 72 20 63 61 6e e descriptor can
09a0: 20 62 65 20 72 65 74 72 69 65 76 65 64 20 75 73 be retrieved us
09b0: 69 6e 67 0d 0a 0d 0a 3c 76 65 72 62 61 74 69 6d ing....<verbatim
09c0: 3e 0d 0a 20 20 28 72 74 64 2d 70 72 6f 70 65 72 >.. (rtd-proper
09d0: 74 69 65 73 20 5b 72 74 64 20 72 74 64 3f 5d 29 ties [rtd rtd?])
09e0: 20 3d 3e 20 28 6c 69 73 74 6f 66 20 70 72 6f 63 => (listof proc
09f0: 65 64 75 72 65 3f 29 0d 0a 3c 2f 76 65 72 62 61 edure?)..</verba
0a00: 74 69 6d 3e 0d 0a 0d 0a 61 6e 64 20 61 6c 6c 20 tim>....and all
0a10: 72 65 63 6f 72 64 20 70 72 6f 70 65 72 74 69 65 record propertie
0a20: 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 s attached to a
0a30: 74 79 70 65 20 64 65 73 63 72 69 70 74 6f 72 20 type descriptor
0a40: 6f 72 20 69 74 73 20 70 61 72 65 6e 74 73 20 63 or its parents c
0a50: 61 6e 20 62 65 20 72 65 74 72 69 65 76 65 64 20 an be retrieved
0a60: 75 73 69 6e 67 0d 0a 0d 0a 3c 76 65 72 62 61 74 using....<verbat
0a70: 69 6d 3e 0d 0a 20 20 28 72 74 64 2d 61 6c 6c 2d im>.. (rtd-all-
0a80: 70 72 6f 70 65 72 74 69 65 73 20 5b 72 74 64 20 properties [rtd
0a90: 72 74 64 3f 5d 29 20 3d 3e 20 28 6c 69 73 74 6f rtd?]) => (listo
0aa0: 66 20 70 72 6f 63 65 64 75 72 65 3f 29 0d 0a 3c f procedure?)..<
0ab0: 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 0a 5a 20 39 /verbatim>...Z 9
0ac0: 38 65 65 30 36 35 32 33 38 66 61 62 32 65 36 34 8ee065238fab2e64
0ad0: 34 65 31 39 32 64 36 65 62 64 34 34 36 36 61 0a 4e192d6ebd4466a.