I like this discuss about mutable variables. You know I also teach caml. I notice that the 2 manners "mutable data" and "not-mutable" data must be separate. If not, everybody make a lot of errors.
Functional languages, mathematics and not-mutable datas are very close. What do you think about this concrete matrix example ? A := matrix [[1,2],[3,4]] fct A == .... A.(1,1) := 10 .... and the result is a number or others. Mathematics say that both 3*A matrices bellow are equal : The variable A is the same and we don't see any assin command. 3*A fct A 3*A --- ve verify the matrix. We don't understand why A changes. First we think about the result of fct, not about the manner we get it. Is it possible to have an automatic copy of the variables in a function ? On the other hand, if we want to code a matrix sequence we write : M := matrix [[...]] fct A == ...A.(1,1):=A.... A -- this A is the result, the new matrix. M := fct M M := fct M -- to iterate. The time for copying data-structure isn't so long that we must think everytime about it. Axiom is designed for mathematics. Axiom Guru's find obvious to code fct M == A:=copy M ... .... in the first case. fct A == A.(1,1) := 12 .... A in the second case. and it's a little faster. But that forces to teach what are mutable/not-mutable data in the first courses of axiom. This isn't the aim of axiom which is a mathematical language. fct A == ... .... axiom copy the matrix. fct A == A.(1,1) := 12 .... A the outer M := explains the matrix change. Maple use a silly evalm matrix command. And I never get difficult with mupad which copy data structure by default. And what do you think about lists ? My first thought for mathematics thinks that lists aren't mutable. But list becomes mutable with L.3 := 33. This assign command is too easy. A setelt! (L, 3, 33) doesn't hide the same difficult. Francois. _______________________________________________ Axiom-developer mailing list Axiom-developer@nongnu.org http://lists.nongnu.org/mailman/listinfo/axiom-developer