init commit again
This commit is contained in:
47
IBAF-cbs/Funcons-beta/Values/Composite/Tuples/Tuples.cbs
Normal file
47
IBAF-cbs/Funcons-beta/Values/Composite/Tuples/Tuples.cbs
Normal file
@@ -0,0 +1,47 @@
|
||||
### 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+)) ~> ( )
|
||||
84
IBAF-cbs/Funcons-beta/Values/Composite/Tuples/index.md
Normal file
84
IBAF-cbs/Funcons-beta/Values/Composite/Tuples/index.md
Normal file
@@ -0,0 +1,84 @@
|
||||
---
|
||||
layout: default
|
||||
title: "Tuples"
|
||||
parent: Composite
|
||||
ancestor: Funcons-beta
|
||||
|
||||
---
|
||||
|
||||
[Funcons-beta] : [Tuples.cbs]
|
||||
-----------------------------
|
||||
|
||||
### Tuples
|
||||
|
||||
<div class="highlighter-rouge"><pre class="highlight"><code>[
|
||||
<i class="keyword">Datatype</i> <span class="name"><a href="#Name_tuples">tuples</a></span>
|
||||
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_tuple-elements">tuple-elements</a></span>
|
||||
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>
|
||||
]</code></pre></div>
|
||||
|
||||
|
||||
|
||||
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Meta-variables</i>
|
||||
<span id="PartVariable_T1"><i class="var">T<sub class="sub">1</sub></i></span>, <span id="PartVariable_T2"><i class="var">T<sub class="sub">2</sub></i></span> <: <span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>
|
||||
<span id="PartVariable_T1+"><i class="var">T<sub class="sub">1</sub><sup class="sup">+</sup></i></span>, <span id="PartVariable_T2+"><i class="var">T<sub class="sub">2</sub><sup class="sup">+</sup></i></span> <: <span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">+</sup>
|
||||
<span id="PartVariable_T*"><i class="var">T<sup class="sup">*</sup></i></span>, <span id="PartVariable_T1*"><i class="var">T<sub class="sub">1</sub><sup class="sup">*</sup></i></span>, <span id="PartVariable_T2*"><i class="var">T<sub class="sub">2</sub><sup class="sup">*</sup></i></span> <: <span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup></code></pre></div>
|
||||
|
||||
|
||||
|
||||
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Datatype</i>
|
||||
<span class="name"><span id="Name_tuples">tuples</span></span>(<span id="Variable98_T*"><i class="var">T<sup class="sup">*</sup></i></span>) ::= <span id="Name_tuple">tuple</span>(_:<span id="Variable115_T*"><i class="var">T<sup class="sup">*</sup></i></span>)</code></pre></div>
|
||||
|
||||
|
||||
<code><i class="var">T<sup class="sup">*</sup></i></code> can be any sequence of types, including <code>( )</code> and <code><span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup></code>.
|
||||
|
||||
The values of type <code><span class="name"><a href="#Name_tuples">tuples</a></span>(<i class="var">T<sub class="sub">1</sub></i>, ..., <i class="var">Tn</i>)</code> are of the form <code><span class="name"><a href="#Name_tuple">tuple</a></span>(<i class="var">V<sub class="sub">1</sub></i>, ..., <i class="var">Vn</i>)</code>
|
||||
with <code><i class="var">V<sub class="sub">1</sub></i>:<i class="var">T<sub class="sub">1</sub></i></code>, ..., <code><i class="var">Vn</i>:<i class="var">Tn</i></code>.
|
||||
|
||||
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
|
||||
<span class="name"><span id="Name_tuple-elements">tuple-elements</span></span>(_:<span class="name"><a href="#Name_tuples">tuples</a></span>(<span id="Variable287_T*"><i class="var">T<sup class="sup">*</sup></i></span>)) : =>(<span id="Variable308_T*"><i class="var">T<sup class="sup">*</sup></i></span>)
|
||||
<i class="keyword">Rule</i>
|
||||
<span class="name"><a href="#Name_tuple-elements">tuple-elements</a></span>(<span class="name"><a href="#Name_tuple">tuple</a></span>(<span id="Variable324_V*"><i class="var">V<sup class="sup">*</sup></i></span>:<i class="var">T<sup class="sup">*</sup></i>)) ~> <a href="#Variable324_V*"><i class="var">V<sup class="sup">*</sup></i></a></code></pre></div>
|
||||
|
||||
|
||||
|
||||
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
|
||||
<span class="name"><span id="Name_tuple-zip">tuple-zip</span></span>(_:<span class="name"><a href="#Name_tuples">tuples</a></span>(<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>), _:<span class="name"><a href="#Name_tuples">tuples</a></span>(<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>)) : =>(<span class="name"><a href="#Name_tuples">tuples</a></span>(<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>,<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>))<sup class="sup">*</sup></code></pre></div>
|
||||
|
||||
<code><span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>(<i class="var">TV<sub class="sub">1</sub></i>, <i class="var">TV<sub class="sub">2</sub></i>)</code> 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.
|
||||
|
||||
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
|
||||
<span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>(<span class="name"><a href="#Name_tuple">tuple</a></span>(<span id="Variable458_V1"><i class="var">V<sub class="sub">1</sub></i></span>:<i class="var">T<sub class="sub">1</sub></i>, <span id="Variable472_V1*"><i class="var">V<sub class="sub">1</sub><sup class="sup">*</sup></i></span>:<i class="var">T<sub class="sub">1</sub><sup class="sup">*</sup></i>), <span class="name"><a href="#Name_tuple">tuple</a></span>(<span id="Variable494_V2"><i class="var">V<sub class="sub">2</sub></i></span>:<i class="var">T<sub class="sub">2</sub></i>, <span id="Variable508_V2*"><i class="var">V<sub class="sub">2</sub><sup class="sup">*</sup></i></span>:<i class="var">T<sub class="sub">2</sub><sup class="sup">*</sup></i>))
|
||||
~> (<span class="name"><a href="#Name_tuple">tuple</a></span>(<a href="#Variable458_V1"><i class="var">V<sub class="sub">1</sub></i></a>, <a href="#Variable494_V2"><i class="var">V<sub class="sub">2</sub></i></a>), <span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>(<span class="name"><a href="#Name_tuple">tuple</a></span>(<a href="#Variable472_V1*"><i class="var">V<sub class="sub">1</sub><sup class="sup">*</sup></i></a>), <span class="name"><a href="#Name_tuple">tuple</a></span>(<a href="#Variable508_V2*"><i class="var">V<sub class="sub">2</sub><sup class="sup">*</sup></i></a>)))
|
||||
<i class="keyword">Rule</i>
|
||||
<span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>(<span class="name"><a href="#Name_tuple">tuple</a></span>( ), <span class="name"><a href="#Name_tuple">tuple</a></span>( )) ~> ( )
|
||||
<i class="keyword">Rule</i>
|
||||
<span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>(<span class="name"><a href="#Name_tuple">tuple</a></span>(<span id="Variable631_V1+"><i class="var">V<sub class="sub">1</sub><sup class="sup">+</sup></i></span>:<i class="var">T<sub class="sub">1</sub><sup class="sup">+</sup></i>), <span class="name"><a href="#Name_tuple">tuple</a></span>( )) ~> ( )
|
||||
<i class="keyword">Rule</i>
|
||||
<span class="name"><a href="#Name_tuple-zip">tuple-zip</a></span>(<span class="name"><a href="#Name_tuple">tuple</a></span>( ), <span class="name"><a href="#Name_tuple">tuple</a></span>(<span id="Variable680_V2+"><i class="var">V<sub class="sub">2</sub><sup class="sup">+</sup></i></span>:<i class="var">T<sub class="sub">2</sub><sup class="sup">+</sup></i>)) ~> ( )</code></pre></div>
|
||||
|
||||
|
||||
|
||||
____
|
||||
|
||||
From the [PLanCompS Project] | [CBS-beta issues...] | [Suggest an improvement...]
|
||||
|
||||
[Tuples.cbs]: Tuples.cbs
|
||||
"CBS SOURCE FILE"
|
||||
[Funcons-beta]: /CBS-beta/docs/Funcons-beta
|
||||
"FUNCONS-BETA"
|
||||
[Unstable-Funcons-beta]: /CBS-beta/docs/Unstable-Funcons-beta
|
||||
"UNSTABLE-FUNCONS-BETA"
|
||||
[Languages-beta]: /CBS-beta/docs/Languages-beta
|
||||
"LANGUAGES-BETA"
|
||||
[Unstable-Languages-beta]: /CBS-beta/docs/Unstable-Languages-beta
|
||||
"UNSTABLE-LANGUAGES-BETA"
|
||||
[CBS-beta]: /CBS-beta "CBS-BETA"
|
||||
[PLanCompS Project]: https://plancomps.github.io
|
||||
"PROGRAMMING LANGUAGE COMPONENTS AND SPECIFICATIONS PROJECT HOME PAGE"
|
||||
[CBS-beta issues...]: https://github.com/plancomps/CBS-beta/issues
|
||||
"CBS-BETA ISSUE REPORTS ON GITHUB"
|
||||
[Suggest an improvement...]: mailto:plancomps@gmail.com?Subject=CBS-beta%20-%20comment&Body=Re%3A%20CBS-beta%20specification%20at%20Values/Composite/Tuples/Tuples.cbs%0A%0AComment/Query/Issue/Suggestion%3A%0A%0A%0ASignature%3A%0A
|
||||
"GENERATE AN EMAIL TEMPLATE"
|
||||
@@ -0,0 +1,18 @@
|
||||
general {
|
||||
funcon-term: sequential (
|
||||
check-true(is-equal(tuple tuple-zip(tuple( ),tuple( )), tuple( )))
|
||||
, check-true(is-equal(tuple tuple-zip(tuple(1),tuple(2)), tuple(tuple(1,2))))
|
||||
, check-true(is-equal(tuple tuple-zip(tuple(1,3),tuple(2,4)),
|
||||
tuple(tuple(1,2),tuple(3,4))))
|
||||
, check-true(is-equal(tuple tuple-zip(tuple(1,3,5),tuple(2,4,6)),
|
||||
tuple(tuple(1,2),tuple(3,4),tuple(5,6))))
|
||||
, check-true(is-equal(tuple tuple-zip(tuple(1),tuple( )), tuple( )))
|
||||
, check-true(is-equal(tuple tuple-zip(tuple( ),tuple(1)), tuple( )))
|
||||
, print "OK"
|
||||
);
|
||||
}
|
||||
|
||||
tests {
|
||||
result-term : null-value;
|
||||
standard-out : ["OK"];
|
||||
}
|
||||
Reference in New Issue
Block a user