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