# 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 :~ ```