Hallo Patrick
Es liegt daran, dass Mathematica bei einer Funktionsdefinition
der Art f[x_]:=... call-by-value benutzt. Dass heisst der Parameter, den
du uebergibst wird nicht als Symbol/Variable uebergeben, sondern nur
dessen Wert.
sinnvollerweise, denn es könnte ja einer folgendes eingeben:
In[13]:= selectionSort[RandomInteger[1000, max]]
Out[13]= {28, 153, 163, 247, 286, 288, 319, 354, 387, 388, 536, 565, \
654, 685, 777, 855, 889, 928, 980, 984}
Der direkte Ausweg ist entweder sich mit Attributen von Funktionen
(HoldFirst, etc) vertraut zu machen,
hmm ...
In[19]:= Remove[max, liste]
max = 20;
liste = RandomInteger[ 1000, max]
Out[21]= {161, 820, 625, 821, 59, 780, 789, 650, 764, 974, 288, 634, \
772, 162, 802, 233, 960, 553, 589, 727}
In[14]:= Remove[selectionSortHF]
SetAttributes[selectionSortHF, HoldFirst];
(* wenn das Attribute HoldFirst gesetzt wird, darf das Argument von
selectionSortHF[] kein HeadPattern haben. *)
selectionSortHF[ liste_(* List *)] :=
Module[{i, j, limit = Length[liste]},
Do[If[ liste[[i]] > liste[[j]],
liste[[{i, j}]] = liste[[{j, i}]]], {i, limit - 1}, {j, i + 1,
limit}];
liste]
In[22]:= selectionSortHF[ liste]
Out[22]= {59, 161, 162, 233, 288, 553, 589, 625, 634, 650, 727, 764, \
772, 780, 789, 802, 820, 821, 960, 974}
okay, jedoch
In[23]:= selectionSortFalsch[RandomInteger[1000, max]]
During evaluation of In[23]:= Set::setps: RandomInteger[1000,max] in the
part assignment is not a symbol. >>
During evaluation of In[23]:= Set::setps: RandomInteger[1000,max] in the
part assignment is not a symbol. >>
During evaluation of In[23]:= Set::setps: RandomInteger[1000,max] in the
part assignment is not a symbol. >>
During evaluation of In[23]:= General::stop: Further output of Set::setps
will be suppressed during this calculation. >>
Out[23]= {61, 446, 741, 692, 2, 122, 904, 909, 125, 196, 730, 79, \
655, 933, 158, 552, 950, 482, 855, 932}
funktioniert nicht, das Ergebnis ist nicht sortiert; liste ist noch ein
Symbol (das bloss ohne HoldFirst nicht im Module sichtbar wird),
RandomInteger[1000, max] ist "nur" eine Expression, die mehrmals evaluiert
wird.
Gruss
Udo.
oder die Eingabeliste einer lokalen
Variablen zuzuweisen:
Ja.