The library (vicare language-extensions tuples) implements
tuples on top of ordinary Scheme lists and vectors; the library makes
use of the typed language. Tuple–types are label–types used to
provide convenient read–only access to lists and vectors
((vicare-scheme)Sub-typing with labels).
The following syntactic bindings are exported by the library
(vicare language-extensions tuples).
Define a new tuple type on top of lists or vectors.
At present only the fields clause is supported; the syntactic
bindings fields and brace are the ones exported by the
library (vicare).
The clause fields must have the following format:
(fields ?field-spec0 ?field-spec ...)
where each ?field-spec must have one of the following formats:
?field-name (brace ?field-name ?field-type)
where ?field-name is a syntactic identifier representing the field
name and ?field-type is a syntax object representing the field’s
type annotation. When no type annotation is specified: it defaults to
<top>.
Usage examples with lists and untyped fields:
(define-list-tuple-type <stuff> (fields a b c)) (define T (new <stuff> 1 2 3)) (.a T) ⇒ 1 (.b T) ⇒ 2 (.c T) ⇒ 3
usage examples with vectors and typed fields:
(define-vector-tuple-type <stuff>
(fields {a <fixnum>}
{b <flonum>}
{c <string>}))
(define T
(new <stuff> 1 2.3 "ciao"))
T ⇒ #(1 2.3 "ciao")
(.a T) ⇒ 1
(.b T) ⇒ 2.3
(.c T) ⇒ "ciao"
(.length (.c T)) ⇒ 4