use lexer::*;
use parser::*;
use environment::*;
use std::rc::Rc;
use std::fmt;
use std::slice;
//To evaluate the values
 fn value_of_proc(v: &String, body: &procLangExp, env: &ProcLangEnv) -> Option<IntBoolProc>{
     Some(IntBoolProc::Procedure(v.clone(),Rc::new(body.clone()),Rc::new(env.clone())))
 }

 fn value_of_call(rator: &procLangExp, rand: &procLangExp,env: &ProcLangEnv)->Option<IntBoolProc>{

     let opt_closure = 
        match rator.clone(){
            procLangExp::VarExp(s) => env.apply_env(&s),
            procLangExp::ProcExp(v,e) => Some(IntBoolProc::Procedure(v.clone(),Rc::new((*e).clone()),Rc::new(env.clone()))),
            _=>None,
        };
 }