Files
IBAFLang/IBAF-cbs/Funcons-beta/Values/Composite/Tuples/Tuples.cbs
2023-11-01 09:29:33 +01:00

48 lines
1.0 KiB
Plaintext

### Tuples
[
Datatype tuples
Funcon tuple-elements
Funcon tuple-zip
]
Meta-variables
T1, T2 <: values
T1+, T2+ <: values+
T*, T1*, T2* <: values*
Datatype
tuples(T*) ::= tuple(_:T*)
/*
`T*` can be any sequence of types, including `( )` and `values*`.
The values of type `tuples(T1, ..., Tn)` are of the form `tuple(V1, ..., Vn)`
with `V1:T1`, ..., `Vn:Tn`.
*/
Funcon
tuple-elements(_:tuples(T*)) : =>(T*)
Rule
tuple-elements(tuple(V*:T*)) ~> V*
Funcon
tuple-zip(_:tuples(values*), _:tuples(values*)) : =>(tuples(values,values))*
/*
`tuple-zip(TV1, TV2)` takes two tuples, and returns the sequence of pairs of
their elements, provided that they have the same length. If they have
different lengths, the last elements of the longer sequence are ignored.
*/
Rule
tuple-zip(tuple(V1:T1, V1*:T1*), tuple(V2:T2, V2*:T2*))
~> (tuple(V1, V2), tuple-zip(tuple(V1*), tuple(V2*)))
Rule
tuple-zip(tuple( ), tuple( )) ~> ( )
Rule
tuple-zip(tuple(V1+:T1+), tuple( )) ~> ( )
Rule
tuple-zip(tuple( ), tuple(V2+:T2+)) ~> ( )