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("comptest.max") read and interpret file: /home/dennis/mastersource/mine/omnisode/comptest.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) addfs(a,b):=(mode_declare([a,b],fixnum),b+a) (%o5) addfs(a, b) := (mode_declare([a, b], fixnum), b + a) (%i6) changes_global_and_array():=(mode_declare(), 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) (%o6) changes_global_and_array() := (mode_declare(), 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 (%i7) doubling_as_parameters(x,y):=(mode_declare([x,y],fixnum), 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)) (%o7) doubling_as_parameters(x, y) := (mode_declare([x, y], fixnum), 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)) (%i8) doubling_array_passed_as_array(y):=( mode_declare( completearray(y[1+glob_max_terms]), fixnum), 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])) (%o8) doubling_array_passed_as_array(y) := (mode_declare(completearray(y ), fixnum), 1 + glob_max_terms printf(true, "----~% before doubling array passed as array y[1] = ~d ~%", y ), 1 y : y 2, printf(true, 1 1 "----~% after doubling array y[1] passed as array = ~d ~%", y )) 1 (%i9) check_global_and_array():=(mode_declare(), printf(true, "----~% in check glob_max_terms = ~d ~%", glob_max_terms), printf(true, "in check array_y[1] = ~d~%--------~%", array_y[1])) (%o9) check_global_and_array() := (mode_declare(), printf(true, "----~% in check glob_max_terms = ~d ~%", glob_max_terms), printf(true, "in check array_y[1] = ~d~%--------~%", array_y )) 1 (%i10) mainprog():=(mode_declare(), 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())) (%o10) mainprog() := (mode_declare(), 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 ~%", 1 array_y ), changes_global_and_array(), check_global_and_array(), 1 doubling_as_parameters(glob_max_terms, array_y ), check_global_and_array(), 1 doubling_array_passed_as_array(array_y), check_global_and_array())) (%i11) main():=mainprog() (%o11) main() := mainprog() (%i12) 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. (%o12) [addfs, mainprog, changes_global_and_array, check_global_and_array, doubling_as_parameters, doubling_array_passed_as_array] (%i13) 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 -------- (%o13) false (%o13) comptest.max