Maxima 5.31.3 http://maxima.sourceforge.net using Lisp CLISP 2.49 (2010-07-07) Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. (%i1) batch("comptest2.max") read and interpret file: /home/dennis/mastersource/mine/omnisode/comptest2.max (%i2) load("stringproc") (%o2) /usr/share/maxima/5.31.3/share/stringproc/stringproc.mac (%i3) define_variable(glob_max_terms,30,fixnum) (%o3) 30 (%i4) array(array_y,1+glob_max_terms) (%o4) array_y (%i5) mode_declare(addfs([a,b],fixnum),fixnum) (%o5) [addfs([a, b], fixnum)] (%i6) mode_declare(changes_global_and_array(),fixnum) (%o6) [changes_global_and_array()] (%i7) mode_declare(doubling_as_parameters([x,y],fixnum),fixnum) (%o7) [doubling_as_parameters([x, y], fixnum)] (%i8) mode_declare(doubling_array_passed_as_array, (completearray(y[1+glob_max_terms]),fixnum)) modedeclare: (completearray(y ), fixnum) 1 + glob_max_terms is not a built-in type; assuming it is a Maxima extension type. (%o8) [doubling_array_passed_as_array] (%i9) mode_declare(check_global_and_array(),fixnum) (%o9) [check_global_and_array()] (%i10) mode_declare(mainprog(),fixnum) (%o10) [mainprog()] (%i11) addfs(a,b):=(mode_declare([a,b],fixnum),b+a) (%o11) addfs(a, b) := (mode_declare([a, b], fixnum), b + a) (%i12) 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) (%o12) 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 : array_y 2) 1 1 (%i13) 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) (%o13) 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) (%i14) 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) (%o14) doubling_array_passed_as_array(y) := (printf(true, "----~% before doubling array passed as array y[1] = ~d ~%", y ), y : y 2, printf(true, 1 1 1 "----~% after doubling array y[1] passed as array = ~d ~%", y ), 0) 1 (%i15) 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) (%o15) 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 ), 0) 1 (%i16) 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) (%o16) mainprog() := block([c], c : addfs(1, 6), printf(true, "c = ~d ~%", c), printf(true, "initial glob_max_terms = ~d ~%", glob_max_terms), array_y : 700, printf(true, "initial array_y[1] = ~d ~%", array_y ), 1 1 changes_global_and_array(), check_global_and_array(), doubling_as_parameters(glob_max_terms, array_y ), check_global_and_array(), 1 doubling_array_passed_as_array(array_y), check_global_and_array(), 0) (%i17) main():=mainprog() (%o17) main() := mainprog() (%i18) compile(addfs,mainprog,changes_global_and_array,check_global_and_array, doubling_as_parameters,doubling_array_passed_as_array) warning: encountered undefined variable glob_max_terms in translation. warning: encountered undefined variable array_y in translation. warning: encountered undefined variable glob_max_terms in translation. warning: encountered undefined variable glob_max_terms in translation. (%o18) [addfs, mainprog, changes_global_and_array, check_global_and_array, doubling_as_parameters, doubling_array_passed_as_array] (%i19) main() c = 7 initial glob_max_terms = 30 initial array_y[1] = 700 Doubling values of glob_max_terms and array_y[1] ---- in check glob_max_terms = 60 in check array_y[1] = 1400 -------- ---- before doubling parameters x = 60 in doubling parameters y = 1400 -------- ---- after doubling parameters x = 120 doubling parameters y = 2800 -------- ---- in check glob_max_terms = 60 in check array_y[1] = 1400 -------- ---- before doubling array passed as array y[1] = 1400 ---- after doubling array y[1] passed as array = 2800 ---- in check glob_max_terms = 60 in check array_y[1] = 2800 -------- (%o19) 0 (%o19) comptest2.max