Quick start Rz
This short article will help you to learn Rz language quickly. Here
are the list of distinct features of Rz (version 3.5).
( for
the older version 3.3 here )
1 Rz is quite like C with only integer type.
2 Global variables must be declared. Local variables are
automatic.
3 An array must be global.
4 Pass reference by &v.
A session in Rz
Try to compile "fac.txt" shown here:
// factorial
fac(n)
if( n == 0 ) return 1
else return n * fac(n-1)
main()
print(fac(6))
Here is the command line and the output at the screen:
D:\rz35\test>rz35 fac.txt
fac
main
(fun main (print (call fac 6 )))
(fun fac (else (== #1 0 )(return 1
)(return (* #1 (call fac (- #1 1 ))))))
:main
fun.1
lit.6
call.fac
sys.1
ret.1
:fac
fun.1
get.1
lit.0
. . .
You will get the file "fac.obj" as an output file. It is an object
file that is executable under Som VM (a kind of virtual machine similar to
JVM). You can "run" it under somv2x.
D:\rz35\test>somv2x fac.obj
720
That's it. Enjoy!
Examples
Ex1. To add one to ten.
main()
i = 1
s = 0
while( i <= 10 )
s = s + i
i = i + 1
print(s)
Ex2. Find a maximum value in an array.
ax[10] // declare an array size 10
// max of array a size n
max(a, n){
m = a[0]
i = 1
while( i < n )
if( m < a[i] )
m = a[i]
i = i + 1
return m
// initialise array
init(a, n)
i = 0
while( i < n )
a[i] = i + 10
i = i + 1
main()
init(&ax,10)
// pass ref of ax
print(max(&ax,10))
Ex3. Recursive function
// factorial
fac(n)
if( n == 0 ) return 1
else return n * fac(n-1)
main()
print(fac(6))
Ex4. Making and printing a linked list of integer
cell[1000]
freecell // cell storage
// access functions
head(a)
return cell[a]
tail(a)
return cell[a+1]
sethead(a,i)
cell[a] = i
settail(a,i)
cell[a+1] = i
newnode(i) // get
a new node, with i
p = freecell
freecell = freecell + 2
if( freecell > 10000 )
print("no more cell")
sethead(p,i)
settail(p,0)
return p
// link node a to list m
insert(m,a)
settail(a,tail(m))
settail(m,a)
// print item in list recursively
prlist2(m)
if( m != 0 )
print(head(m),"
")
prlist2(tail(m))
// main print list, skip header node
prlist(m)
prlist2(tail(m))
main()
h =
newnode(0) // make header
insert(h,newnode(1))
insert(h,newnode(2))
insert(h,newnode(3))
prlist(h)
last update 15 Aug 2017