let assign_sub (name_to_assign : string) (sub : (string * string * string * string) list) : unit =
        let rec normalize name v = 
                let decomp = decompose v in
                if(decomp<>[]) then ((normalize name (car decomp))^"("^(list2string "," (List.map (fun e -> normalize name e) (cdr decomp)))^")")
                else if (is_a_var v) then normalize name (get_value_of_var name v)
                else v
        in
        List.iter
        (fun (name1,value,name2,var) ->
                if(name2=name_to_assign)
                        then(
                        if(name1<>name2)
                        then add_var_value name1 (normalize name1 value) name2 var
                        else add_var_value name1 (normalize name1 value) name2 var
                );
        )
        sub