# Value cloning

Sometimes in Granite, you may want to *clone* variables. This is fairly easy with one operation!

## New operations

`:%(source),(target)`

, variable clone, sets`(target)`

to the value in`(source)`

## Tutorial

Imagine you want to create a program to calculate a Fibonacci sequence up to a certain term.

The first two numbers of the sequence are 0 and 1 and each next term is the sum of the previous two meaning that number #3 is number #1 (0) plus number #2 (1)

We can begin the program by initialising and printing the first terms and the counter and asking the user for a term:

```
:0 Init variables and ask user for term
:?a
:>2,i
:>0,x
:>1,y
:>0,z
:0 print term 0 and term 1 and stop if user didnt want more
:!x
:=exit,a,0
:!y
:=exit,a,1
:0 increment a for loop purposes
:^a
```

Now for the loop, first we want to perform the addition and increment i:

```
:@loop
:ax,y,z
:!z
:^i
```

Now we want to move the new term into `y`

and the `y`

term into `x`

.

```
:%y,x
:%z,y
```

We need to clone the `y`

term into `x`

*first*

Now add the loop operation and premature exit label.

```
:-loop,i,a
:@exit
:~
```

Now run the program, you'll get an output similar to this after entering a number:

```
? 12
0
1
1
2
3
5
8
13
21
34
55
89
144
```

Congratulations! Now you can clone variables!

## After example

```
:?a
:>2,i
:>0,x
:>1,y
:>0,z
:!x
:=exit,a,0
:!y
:=exit,a,1
:^a
:@loop
:ax,y,z
:!z
:^i
:%y,x
:%z,y
:-loop,i,a
:@exit
:~
```