Hallo Frank,
Frank Küster wrote:
RoundToRecursive[number_, precision_, factor_, multiplications_] :=
Module[{epsilon},
epsilon = 10\^-10; \ (*needed because Round[2.5] gives 2*)
If[ 10\^(precision - 1) <= number < 10\^precision,
Return[
{ Round[number + epsilon], multiplications}
]
];
newmultiplications = multiplications + 1;
varnumber = number; (* warum gibt's einen Fehler, wenn ich number
direkt verändere?*)
(1) erste Antwort: number ist an der Stelle kein lvalue, oder mit
anderen Worten, Mma. Funktionen übernehmen die Argumente "by value",
nicht "by reference" -> see pass by value vs. pass by reference (pointer).
(2) zweite Antwort: Mma Funktionen kennen keine IN/OUT Argumente, wie
etwa in PL/SQL. Der übergebene Wert ist in der Funktion ein bestimmter -
instanziiert - und dieser Instanz, etwa 0.815, kann keine andere Instanz
zugewiesen werden.
(3) Beispiel:
In[11]:=
Remove[evaluation]
evaluation[x_, y_] := Block[{}, y = x; Print["y ist x geworden: ", y]]
In[13]:= evaluation[8.4, 4.8]
From In[13]:= Set::setraw : Cannot assign to raw object 4.8`. Mehr ...
From In[13]:= y ist x geworden: 4.8
y wird nicht x. Die Fehlermeldung ist eigentlich klar.
Gruss
Udo.