# Creating and Modifying Tuples

## `elt< C | a₁, a₂, ..., aₖ >: SetCart, Elt, ..., Elt -> Tup`

## `C ! < a₁, a₂, ..., aₖ >: SetCart, Elt, ..., Elt -> Tup`

Given a cartesian product $C = R\ _1 \times \cdots \times R_k$ and a sequence of elements $a_1, a_2, \ldots, a_k$, such that $a_i$ belongs to the set $R_i$ $(i = 1, \ldots, k)$, create the tuple $T = < a_1, a_2, ..., a_k\ >$ of $C$.

## `< a₁, a₂, ..., aₖ >: Elt, ..., Elt -> Tup`

Given a cartesian product $C = R_1 \times \cdots \times R_k$ and a list of elements $a_1, a_2, \ldots, a_k$, such that $a_i$ belongs to the set $R_i$, $(i = 1, \ldots, k)$, create the tuple $T = < a_1, a_2, ..., a_k\ >$ of $C$. Note that if $C$ does not already exist, it will be created at the time this expression is evaluated.

## `Append(T, x): Tup, Elt -> Tup`

Return the tuple formed by adding the object $x$ to the end of the tuple $T$. Note that the result lies in a new cartesian product of course.

## `Append(~T, x): Tup, Elt`

(Procedure.) Destructively add the object $x$ to the end of the tuple $T$. Note that the new $T$ lies in a new cartesian product of course.

## `Prune(T): Tup -> Tup`

Return the tuple formed by removing the last term of the tuple $T$. The length of $T$ must be greater than 1. Note that the result lies in a new cartesian product of course.

## `Prune(~T): Tup`

(Procedure.) Destructively remove the last term of the tuple $T$. The length of $T$ must be greater than 1. Note that the new $T$ lies in a new cartesian product of course.

## `Flat(T): Tup -> Tup`

Construct the flattened version of the tuple T. The flattening is done in the same way as [`Flat`](creation.md#function-tuple-flat1), namely depth-first.

## `Example: Tuple (ex-cc3d86)`

We build a set of pairs consisting of primes and their reciprocals.

```magma
> C := car< Integers(), RationalField() >;
> C ! < 26/13, 13/26 >;
<2, 1/2>
> S := { C | <p, 1/p> : p in [1..25] | IsPrime(p) };
> S;
{ <5, 1/5>, <7, 1/7>, <2, 1/2>, <19, 1/19>, <17, 1/17>, <23, 1/23>, <11, 1/11>,
<13, 1/13>, <3, 1/3> }

```
