// example of porting eval3.c  to Rz
//    20 Aug 2011

cell[1000];
NIL, tkIF, tkELSE, tkWHILE, tkPLUS;

head(a){return cell[a];}
tail(a){return cell[a+1];}
arg1(e){return head(e);}
arg2(e){return head(tail(e));}
arg3(e){return head(tail(tail(e)));}

isatom(e){}
evalatom(e){}

initialise(){
  NIL = -1;
  tkIF = 20;
  tkELSE = 21;
  tkWHILE = 22;
  tkPLUS = 23;
}

eval(e){
  if( e == NIL) return NIL;
  if( isatom(e) ) return evalatom(e);

  e1 = tail(e);	// argument list (arg1 arg2 ...)
  e = head(e);	// operator
  op = tail(e);

  if(op == tkIF){
    if( eval(arg1(e1)) )
      return eval(arg2(e1));
    return NIL;
  }else if(op == tkELSE){
    if( eval(arg1(e1)) )
       return eval(arg2(e1));
    else
      return eval(arg3(e1));
  }else if(op == tkWHILE){
    while( eval(arg1(e1)) )
      v = eval(arg2(e1));
    return v;
  }else if(op == tKPLUS){
    return eval(arg1(e1)) + eval(arg2(e1));
  }
  //  etc....
}

