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