load("stringproc"); /* It seems globs must be at the outermost level */ define_variable(glob_max_terms,30,fixnum ); array(array_y,glob_max_terms + 1); modedeclare(addfs([a,b],fixnum),fixnum); modedeclare(changes_global_and_array(),fixnum); modedeclare(doubling_as_parameters([x,y],fixnum),fixnum); modedeclare(doubling_array_passed_as_array,(completearray(y[glob_max_terms+1]),fixnum)); modedeclare(check_global_and_array(),fixnum); modedeclare(mainprog(),fixnum); addfs(a,b) := (modedeclare([a,b],fixnum),a+b); changes_global_and_array() := ( printf(true,"Doubling values of glob_max_terms and array_y[1]~%"), glob_max_terms : glob_max_terms * 2, array_y[1] : array_y[1] * 2 ); doubling_as_parameters(x,y) := ( printf(true,"----~% before doubling parameters x = ~d ~%",x), printf(true,"in doubling parameters~% y = ~d~%--------~%",y), x : x * 2, y : y * 2, printf(true,"----~%after doubling parameters x = ~d ~%",x), printf(true," doubling parameters y = ~d~%--------~%",y),0 ); doubling_array_passed_as_array(y) := ( printf(true,"----~% before doubling array passed as array y[1] = ~d ~%",y[1]), y[1] : y[1] * 2, printf(true,"----~% after doubling array y[1] passed as array = ~d ~%",y[1]),0 ); check_global_and_array() := ( printf(true,"----~% in check glob_max_terms = ~d ~%",glob_max_terms), printf(true,"in check array_y[1] = ~d~%--------~%",array_y[1]),0 ); mainprog() := (block([c], c : addfs(1,6), printf(true,"c = ~d ~%",c), printf(true,"initial glob_max_terms = ~d ~%",glob_max_terms), array_y[1] : 700, printf(true,"initial array_y[1] = ~d ~%",array_y[1]), changes_global_and_array(), check_global_and_array(), doubling_as_parameters(glob_max_terms,array_y[1]), check_global_and_array(), doubling_array_passed_as_array(array_y), check_global_and_array(),0 )); main() := ( mainprog() ); compile(addfs,mainprog,changes_global_and_array,check_global_and_array,doubling_as_parameters,doubling_array_passed_as_array); main();