init commit again

This commit is contained in:
Peter
2023-11-01 09:29:33 +01:00
parent 448147e7da
commit d6c745207b
250 changed files with 15552 additions and 1 deletions

View File

@@ -0,0 +1,157 @@
### Sequences of values
[
Funcon length
Funcon index
Funcon is-in
Funcon first
Funcon second
Funcon third
Funcon first-n
Funcon drop-first-n
Funcon reverse
Funcon n-of
Funcon intersperse
]
/*
Sequences of two or more values are not themselves values, nor is the empty
sequence a value. However, sequences can be provided to funcons as arguments,
and returned as results. Many operations on composite values can be expressed
by extracting their components as sequences, operating on the sequences, then
forming the required composite values from the resulting sequences.
A sequence with elements `X1`, ..., `Xn` is written `X1,...,Xn`.
A sequence with a single element `X` is identified with (and written) `X`.
An empty sequence is indicated by the absence of a term.
Any sequence `X*` can be enclosed in parentheses `(X*)`, e.g.:
`( )`, `(1)`, `(1,2,3)`. Superfluous commas are ignored.
The elements of a type sequence `T1,...,Tn` are the value sequences `V1,...,Vn`
where `V1:T1`, ..., `Vn:Tn`. The only element of the empty type sequence `( )`
is the empty value sequence `( )`.
`(T)^N` is equivalent to `T,...,T` with `N` occurrences of `T`.
`(T)*` is equivalent to the union of all `(T)^N` for `N`>=0,
`(T)+` is equivalent to the union of all `(T)^N` for `N`>=1, and
`(T)?` is equivalent to `T | ( )`.
The parentheses around `T` above can be omitted when they are not needed for
disambiguation.
(Non-trivial) sequence types are not values, so not included in `types`.
*/
Meta-variables
T, T' <: values
Funcon
length(_:values*) : =>natural-numbers
/*
`length(V*)` gives the number of elements in `V*`.
*/
Rule
length( ) ~> 0
Rule
length(V:values, V*:values*) ~> natural-successor(length(V*))
Funcon
is-in(_:values, _:values*) : =>booleans
Rule
is-in(V:values ,V':values, V*:values*) ~> or(is-equal(V, V'), is-in(V, V*))
Rule
is-in(V:values, ( )) ~> false
#### Sequence indexing
Funcon
index(_:natural-numbers, _:values*) : =>values?
/*
`index(N, V*)` gives the `N`th element of `V*`, if it exists, otherwise `( )`.
*/
Rule
index(1, V:values, V*:values*) ~> V
Rule
natural-predecessor(N) ~> N'
-----------------------------------------------------------------
index(N:positive-integers, _:values, V*:values*) ~> index(N', V*)
Rule
index(0, V*:values*) ~> ( )
Rule
index(_:positive-integers, ( )) ~> ( )
/* Total indexing funcons: */
Funcon
first(_:T, _:values*) : =>T
Rule
first(V:T, V*:values*) ~> V
Funcon
second(_:values, _:T, _:values*) : =>T
Rule
second(_:values, V:T, V*:values*) ~> V
Funcon
third(_:values, _:values, _:T, _:values*) : =>T
Rule
third(_:values, _:values, V:T, V*:values*) ~> V
#### Homogeneous sequences
Funcon
first-n(_:natural-numbers, _:(T)*) : =>(T)*
Rule
first-n(0, V*:(T)*) ~> ( )
Rule
natural-predecessor(N) ~> N'
-----------------------------------------------------------------
first-n(N:positive-integers, V:T, V*:(T)*) ~> (V,first-n(N', V*))
Rule
first-n(N:positive-integers, ( )) ~> ( )
Funcon
drop-first-n(_:natural-numbers, _:(T)*) : =>(T)*
Rule
drop-first-n(0, V*:(T)*) ~> V*
Rule
natural-predecessor(N) ~> N'
-----------------------------------------------------------------------
drop-first-n(N:positive-integers, _:T, V*:(T)*) ~> drop-first-n(N', V*)
Rule
drop-first-n(N:positive-integers, ( )) ~> ( )
Funcon
reverse(_:(T)*) : =>(T)*
Rule
reverse( ) ~> ( )
Rule
reverse(V:T, V*:(T)*) ~> (reverse(V*), V)
Funcon
n-of(N:natural-numbers, V:T) : =>(T)*
Rule
n-of(0, _:T) ~> ( )
Rule
natural-predecessor(N) ~> N'
--------------------------------------------------
n-of(N:positive-integers, V:T) ~> (V, n-of(N', V))
Funcon
intersperse(_:T', _:(T)*) : =>(T, (T', T)*)?
Rule
intersperse(_:T', ( )) ~> ( )
Rule
intersperse(_:T', V) ~> V
Rule
intersperse(V':T', V1:T, V2:T, V*:(T)*) ~> (V1, V', intersperse(V', V2, V*))

View File

@@ -0,0 +1,192 @@
---
layout: default
title: "Sequences"
parent: Composite
ancestor: Funcons-beta
---
[Funcons-beta] : [Sequences.cbs]
-----------------------------
### Sequences of values
<div class="highlighter-rouge"><pre class="highlight"><code>[
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_length">length</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_index">index</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_is-in">is-in</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_first">first</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_second">second</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_third">third</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_first-n">first-n</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_drop-first-n">drop-first-n</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_reverse">reverse</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_n-of">n-of</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_intersperse">intersperse</a></span>
]</code></pre></div>
Sequences of two or more values are not themselves values, nor is the empty
sequence a value. However, sequences can be provided to funcons as arguments,
and returned as results. Many operations on composite values can be expressed
by extracting their components as sequences, operating on the sequences, then
forming the required composite values from the resulting sequences.
A sequence with elements <code><i class="var">X<sub class="sub">1</sub></i></code>, ..., <code><i class="var">Xn</i></code> is written <code><i class="var">X<sub class="sub">1</sub></i>,...,<i class="var">Xn</i></code>.
A sequence with a single element <code><i class="var">X</i></code> is identified with (and written) <code><i class="var">X</i></code>.
An empty sequence is indicated by the absence of a term.
Any sequence <code><i class="var">X<sup class="sup">*</sup></i></code> can be enclosed in parentheses <code>(<i class="var">X<sup class="sup">*</sup></i>)</code>, e.g.:
<code>( )</code>, <code>(1)</code>, <code>(1,2,3)</code>. Superfluous commas are ignored.
The elements of a type sequence <code><i class="var">T<sub class="sub">1</sub></i>,...,<i class="var">Tn</i></code> are the value sequences <code><i class="var">V<sub class="sub">1</sub></i>,...,<i class="var">Vn</i></code>
where <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>. The only element of the empty type sequence <code>( )</code>
is the empty value sequence <code>( )</code>.
<code>(<i class="var">T</i>)^<i class="var">N</i></code> is equivalent to <code><i class="var">T</i>,...,<i class="var">T</i></code> with <code><i class="var">N</i></code> occurrences of <code><i class="var">T</i></code>.
<code>(<i class="var">T</i>)<sup class="sup">*</sup></code> is equivalent to the union of all <code>(<i class="var">T</i>)^<i class="var">N</i></code> for <code><i class="var">N</i></code>>=0,
<code>(<i class="var">T</i>)<sup class="sup">+</sup></code> is equivalent to the union of all <code>(<i class="var">T</i>)^<i class="var">N</i></code> for <code><i class="var">N</i></code>>=1, and
<code>(<i class="var">T</i>)<sup class="sup">?</sup></code> is equivalent to <code><i class="var">T</i> | ( )</code>.
The parentheses around <code><i class="var">T</i></code> above can be omitted when they are not needed for
disambiguation.
(Non-trivial) sequence types are not values, so not included in <code><span class="name"><a href="../../Value-Types/index.html#Name_types">types</a></span></code>.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Meta-variables</i>
<span id="PartVariable_T"><i class="var">T</i></span>, <span id="PartVariable_T'"><i class="var">T&prime;</i></span> <: <span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span></code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_length">length</span></span>(_:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) : =><span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-numbers">natural-numbers</a></span></code></pre></div>
<code><span class="name"><a href="#Name_length">length</a></span>(<i class="var">V<sup class="sup">*</sup></i>)</code> gives the number of elements in <code><i class="var">V<sup class="sup">*</sup></i></code>.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_length">length</a></span>( ) ~> 0
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_length">length</a></span>(<span id="Variable675_V"><i class="var">V</i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, <span id="Variable684_V*"><i class="var">V<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 class="name"><a href="../../Primitive/Integers/index.html#Name_natural-successor">natural-successor</a></span>(<span class="name"><a href="#Name_length">length</a></span>(<a href="#Variable684_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_is-in">is-in</span></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>) : =><span class="name"><a href="../../Primitive/Booleans/index.html#Name_booleans">booleans</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_is-in">is-in</a></span>(<span id="Variable756_V"><i class="var">V</i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span> ,<span id="Variable765_V'"><i class="var">V&prime;</i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, <span id="Variable774_V*"><i class="var">V<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 class="name"><a href="../../Primitive/Booleans/index.html#Name_or">or</a></span>(<span class="name"><a href="../../Value-Types/index.html#Name_is-equal">is-equal</a></span>(<a href="#Variable756_V"><i class="var">V</i></a>, <a href="#Variable765_V'"><i class="var">V&prime;</i></a>), <span class="name"><a href="#Name_is-in">is-in</a></span>(<a href="#Variable756_V"><i class="var">V</i></a>, <a href="#Variable774_V*"><i class="var">V<sup class="sup">*</sup></i></a>))
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_is-in">is-in</a></span>(<span id="Variable842_V"><i class="var">V</i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, ( )) ~> <span class="name"><a href="../../Primitive/Booleans/index.html#Name_false">false</a></span></code></pre></div>
#### Sequence indexing
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_index">index</span></span>(_:<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-numbers">natural-numbers</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="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">?</sup></code></pre></div>
<code><span class="name"><a href="#Name_index">index</a></span>(<i class="var">N</i>, <i class="var">V<sup class="sup">*</sup></i>)</code> gives the <code><i class="var">N</i></code>th element of <code><i class="var">V<sup class="sup">*</sup></i></code>, if it exists, otherwise <code>( )</code>.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_index">index</a></span>(1, <span id="Variable988_V"><i class="var">V</i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, <span id="Variable997_V*"><i class="var">V<sup class="sup">*</sup></i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) ~> <a href="#Variable988_V"><i class="var">V</i></a>
<i class="keyword">Rule</i>
<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-predecessor">natural-predecessor</a></span>(<a href="#Variable1047_N"><i class="var">N</i></a>) ~> <span id="Variable1036_N'"><i class="var">N&prime;</i></span>
-----------------------------------------------------------------
<span class="name"><a href="#Name_index">index</a></span>(<span id="Variable1047_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, _:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, <span id="Variable1063_V*"><i class="var">V<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 class="name"><a href="#Name_index">index</a></span>(<a href="#Variable1036_N'"><i class="var">N&prime;</i></a>, <a href="#Variable1063_V*"><i class="var">V<sup class="sup">*</sup></i></a>)
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_index">index</a></span>(0, <span id="Variable1108_V*"><i class="var">V<sup class="sup">*</sup></i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) ~> ( )
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_index">index</a></span>(_:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, ( )) ~> ( )</code></pre></div>
Total indexing funcons:
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_first">first</span></span>(_:<span id="Variable1168_T"><i class="var">T</i></span>, _:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) : =><span id="Variable1193_T"><i class="var">T</i></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_first">first</a></span>(<span id="Variable1202_V"><i class="var">V</i></span>:<i class="var">T</i>, <span id="Variable1214_V*"><i class="var">V<sup class="sup">*</sup></i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) ~> <a href="#Variable1202_V"><i class="var">V</i></a></code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_second">second</span></span>(_:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, _:<span id="Variable1251_T"><i class="var">T</i></span>, _:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) : =><span id="Variable1277_T"><i class="var">T</i></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_second">second</a></span>(_:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span>, <span id="Variable1293_V"><i class="var">V</i></span>:<i class="var">T</i>, <span id="Variable1305_V*"><i class="var">V<sup class="sup">*</sup></i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) ~> <a href="#Variable1293_V"><i class="var">V</i></a></code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_third">third</span></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>, _:<span id="Variable1351_T"><i class="var">T</i></span>, _:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) : =><span id="Variable1378_T"><i class="var">T</i></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_third">third</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>, <span id="Variable1401_V"><i class="var">V</i></span>:<i class="var">T</i>, <span id="Variable1413_V*"><i class="var">V<sup class="sup">*</sup></i></span>:<span class="name"><a href="../../Value-Types/index.html#Name_values">values</a></span><sup class="sup">*</sup>) ~> <a href="#Variable1401_V"><i class="var">V</i></a></code></pre></div>
#### Homogeneous sequences
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_first-n">first-n</span></span>(_:<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-numbers">natural-numbers</a></span>, _:(<span id="Variable1473_T"><i class="var">T</i></span>)<sup class="sup">*</sup>) : =>(<span id="Variable1495_T"><i class="var">T</i></span>)<sup class="sup">*</sup>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_first-n">first-n</a></span>(0, <span id="Variable1514_V*"><i class="var">V<sup class="sup">*</sup></i></span>:(<i class="var">T</i>)<sup class="sup">*</sup>) ~> ( )
<i class="keyword">Rule</i>
<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-predecessor">natural-predecessor</a></span>(<a href="#Variable1570_N"><i class="var">N</i></a>) ~> <span id="Variable1559_N'"><i class="var">N&prime;</i></span>
-----------------------------------------------------------------
<span class="name"><a href="#Name_first-n">first-n</a></span>(<span id="Variable1570_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, <span id="Variable1578_V"><i class="var">V</i></span>:<i class="var">T</i>, <span id="Variable1590_V*"><i class="var">V<sup class="sup">*</sup></i></span>:(<i class="var">T</i>)<sup class="sup">*</sup>) ~> (<a href="#Variable1578_V"><i class="var">V</i></a>,<span class="name"><a href="#Name_first-n">first-n</a></span>(<a href="#Variable1559_N'"><i class="var">N&prime;</i></a>, <a href="#Variable1590_V*"><i class="var">V<sup class="sup">*</sup></i></a>))
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_first-n">first-n</a></span>(<span id="Variable1651_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, ( )) ~> ( )</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_drop-first-n">drop-first-n</span></span>(_:<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-numbers">natural-numbers</a></span>, _:(<span id="Variable1689_T"><i class="var">T</i></span>)<sup class="sup">*</sup>) : =>(<span id="Variable1711_T"><i class="var">T</i></span>)<sup class="sup">*</sup>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_drop-first-n">drop-first-n</a></span>(0, <span id="Variable1730_V*"><i class="var">V<sup class="sup">*</sup></i></span>:(<i class="var">T</i>)<sup class="sup">*</sup>) ~> <a href="#Variable1730_V*"><i class="var">V<sup class="sup">*</sup></i></a>
<i class="keyword">Rule</i>
<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-predecessor">natural-predecessor</a></span>(<a href="#Variable1788_N"><i class="var">N</i></a>) ~> <span id="Variable1777_N'"><i class="var">N&prime;</i></span>
-----------------------------------------------------------------------
<span class="name"><a href="#Name_drop-first-n">drop-first-n</a></span>(<span id="Variable1788_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, _:<i class="var">T</i>, <span id="Variable1807_V*"><i class="var">V<sup class="sup">*</sup></i></span>:(<i class="var">T</i>)<sup class="sup">*</sup>) ~> <span class="name"><a href="#Name_drop-first-n">drop-first-n</a></span>(<a href="#Variable1777_N'"><i class="var">N&prime;</i></a>, <a href="#Variable1807_V*"><i class="var">V<sup class="sup">*</sup></i></a>)
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_drop-first-n">drop-first-n</a></span>(<span id="Variable1857_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, ( )) ~> ( )</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_reverse">reverse</span></span>(_:(<span id="Variable1887_T"><i class="var">T</i></span>)<sup class="sup">*</sup>) : =>(<span id="Variable1908_T"><i class="var">T</i></span>)<sup class="sup">*</sup>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_reverse">reverse</a></span>( ) ~> ( )
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_reverse">reverse</a></span>(<span id="Variable1937_V"><i class="var">V</i></span>:<i class="var">T</i>, <span id="Variable1949_V*"><i class="var">V<sup class="sup">*</sup></i></span>:(<i class="var">T</i>)<sup class="sup">*</sup>) ~> (<span class="name"><a href="#Name_reverse">reverse</a></span>(<a href="#Variable1949_V*"><i class="var">V<sup class="sup">*</sup></i></a>), <a href="#Variable1937_V"><i class="var">V</i></a>)</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_n-of">n-of</span></span>(<span id="Variable2002_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-numbers">natural-numbers</a></span>, <span id="Variable2011_V"><i class="var">V</i></span>:<span id="Variable2015_T"><i class="var">T</i></span>) : =>(<span id="Variable2030_T"><i class="var">T</i></span>)<sup class="sup">*</sup>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_n-of">n-of</a></span>(0, _:<i class="var">T</i>) ~> ( )
<i class="keyword">Rule</i>
<span class="name"><a href="../../Primitive/Integers/index.html#Name_natural-predecessor">natural-predecessor</a></span>(<a href="#Variable2096_N"><i class="var">N</i></a>) ~> <span id="Variable2085_N'"><i class="var">N&prime;</i></span>
--------------------------------------------------
<span class="name"><a href="#Name_n-of">n-of</a></span>(<span id="Variable2096_N"><i class="var">N</i></span>:<span class="name"><a href="../../Primitive/Integers/index.html#Name_positive-integers">positive-integers</a></span>, <span id="Variable2104_V"><i class="var">V</i></span>:<i class="var">T</i>) ~> (<a href="#Variable2104_V"><i class="var">V</i></a>, <span class="name"><a href="#Name_n-of">n-of</a></span>(<a href="#Variable2085_N'"><i class="var">N&prime;</i></a>, <a href="#Variable2104_V"><i class="var">V</i></a>))</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_intersperse">intersperse</span></span>(_:<span id="Variable2160_T'"><i class="var">T&prime;</i></span>, _:(<span id="Variable2171_T"><i class="var">T</i></span>)<sup class="sup">*</sup>) : =>(<span id="Variable2193_T"><i class="var">T</i></span>, (<span id="Variable2199_T'"><i class="var">T&prime;</i></span>, <span id="Variable2204_T"><i class="var">T</i></span>)<sup class="sup">*</sup>)<sup class="sup">?</sup>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_intersperse">intersperse</a></span>(_:<i class="var">T&prime;</i>, ( )) ~> ( )
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_intersperse">intersperse</a></span>(_:<i class="var">T&prime;</i>, <span id="Variable2270_V"><i class="var">V</i></span>) ~> <a href="#Variable2270_V"><i class="var">V</i></a>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_intersperse">intersperse</a></span>(<span id="Variable2292_V'"><i class="var">V&prime;</i></span>:<i class="var">T&prime;</i>, <span id="Variable2305_V1"><i class="var">V<sub class="sub">1</sub></i></span>:<i class="var">T</i>, <span id="Variable2317_V2"><i class="var">V<sub class="sub">2</sub></i></span>:<i class="var">T</i>, <span id="Variable2329_V*"><i class="var">V<sup class="sup">*</sup></i></span>:(<i class="var">T</i>)<sup class="sup">*</sup>) ~> (<a href="#Variable2305_V1"><i class="var">V<sub class="sub">1</sub></i></a>, <a href="#Variable2292_V'"><i class="var">V&prime;</i></a>, <span class="name"><a href="#Name_intersperse">intersperse</a></span>(<a href="#Variable2292_V'"><i class="var">V&prime;</i></a>, <a href="#Variable2317_V2"><i class="var">V<sub class="sub">2</sub></i></a>, <a href="#Variable2329_V*"><i class="var">V<sup class="sup">*</sup></i></a>))</code></pre></div>
____
From the [PLanCompS Project] | [CBS-beta issues...] | [Suggest an improvement...]
[Sequences.cbs]: Sequences.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/Sequences/Sequences.cbs%0A%0AComment/Query/Issue/Suggestion%3A%0A%0A%0ASignature%3A%0A
"GENERATE AN EMAIL TEMPLATE"

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(is-equal(tuple(1,2,3,4,5), tuple drop-first-n(0,1,2,3,4,5)))
, check-true(is-equal(tuple(2,3,4,5), tuple drop-first-n(1,1,2,3,4,5)))
, check-true(is-equal(tuple(3,4,5), tuple drop-first-n(2,1,2,3,4,5)))
, check-true(is-equal(tuple(4,5), tuple drop-first-n(3,1,2,3,4,5)))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(is-equal(tuple(), tuple first-n(0,1,2,3,4,5)))
, check-true(is-equal(tuple(1), tuple first-n(1,1,2,3,4,5)))
, check-true(is-equal(tuple(1,2), tuple first-n(2,1,2,3,4,5)))
, check-true(is-equal(tuple(1,2,3), tuple first-n(3,1,2,3,4,5)))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,12 @@
general {
funcon-term: sequential (
check-true(is-equal(first(1), 1))
, check-true(is-equal(first(1,2,3), 1))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,21 @@
general {
funcon-term: sequential (
check-true(is-equal(index(1,1), 1))
, check-true(is-equal(index(1,1,2), 1))
, check-true(is-equal(index(2,1,2), 2))
, check-true(is-equal(index(2,1,2,3), 2))
, check-true(not is-value(index(0)))
, check-true(not is-value(index(0,1)))
, check-true(not is-value(index(0,1,2)))
, check-true(not is-value(index(1)))
, check-true(not is-value(index(2)))
, check-true(not is-value(index(2,1)))
, check-true(not is-value(index(3,1,2)))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(is-equal(tuple intersperse(42), tuple( )))
, check-true(is-equal(tuple intersperse(42,1), tuple(1)))
, check-true(is-equal(tuple intersperse(0,1,2), tuple(1,0,2)))
, check-true(is-equal(tuple intersperse(0,1,2,3), tuple(1,0,2,0,3)))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,18 @@
general {
funcon-term: sequential (
check-true(is-in(1,1))
, check-true(is-in(1,1,2))
, check-true(is-in(2,1,2))
, check-true(is-in(3,1,2,3,4,5))
, check-true(not is-in(0))
, check-true(not is-in(1))
, check-true(not is-in(0,1))
, check-true(not is-in(3,1,2))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,13 @@
general {
funcon-term: sequential (
check-true(is-equal(length( ), 0))
, check-true(is-equal(length(1), 1))
, check-true(is-equal(length(1,2,3), 3))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(is-equal(tuple n-of(0,42), tuple( )))
, check-true(is-equal(tuple n-of(1,2), tuple(2)))
, check-true(is-equal(tuple n-of(2,3), tuple(3,3)))
, check-true(is-equal(tuple n-of(3,4), tuple(4,4,4)))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(is-equal(tuple reverse( ), tuple( )))
, check-true(is-equal(tuple reverse(1), tuple(1)))
, check-true(is-equal(tuple reverse(1,2), tuple(2,1)))
, check-true(is-equal(tuple reverse(1,2,3), tuple(3,2,1)))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,12 @@
general {
funcon-term: sequential (
check-true(is-equal(second(1,2), 2))
, check-true(is-equal(second(1,2,3), 2))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,12 @@
general {
funcon-term: sequential (
check-true(is-equal(third(1,2,3), 3))
, check-true(is-equal(third(1,2,3,4), 3))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}