Moin,
die Sache ist einfach einzusehen und hat auch nichts mit deinem Module
zu tun. 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. Am besten vielleicht ein kleines Beispiel. Eine Funktion f,
die auf die naive Weise das 3. Element einer Liste auf 3 setzen soll:
f[l_] := (l[[3]] = 3)
Jetzt definieren wir uns eine Liste und benutzen Trace um die genaue
Abfolge der Evaluation zu sehen:
liste = {0, 0, 0};
Trace[f[liste]]
Hier der Teil ohne die Fehlermeldung:
{{liste, {0,0,0}}, f[{0,0,0}], {0,0,0}[[3]]=3, ...
Du siehst, zuerst wird der Parameter liste ausgewertet und zu {0,0,0}
vereinfacht. Wenn das dann im Funktionskoerper ankommt macht es
natuerlich keinen Sinn mehr, denn bei sowas {0,0,0}[[3]]=3 muss vorn
immer ein Variablenname stehen.
Der direkte Ausweg ist entweder sich mit Attributen von Funktionen
(HoldFirst, etc) vertraut zu machen, oder die Eingabeliste einer lokalen
Variablen zuzuweisen:
f[l_] := Module[{liste = l},
liste[[1]] = 3;
liste]
Cheers
Patrick
On Wed, 2012-12-26 at 12:45 +0100, Michael Gamer wrote:
> Hallo zusammen,
>
>
> wie oft, wenn man mal schnell etwas machen will.... dauert es. Ich
> wollte eine kurze Darstellung des Selectionsort machen und habe dafür
> einfach das Beispiel aus der Dokumentation (im Abschnitt der DO
> Funktion) genommen (Bild anbei). Den Ausschnitt habe ich in einen
> Modul eingebunden. Eigentlich sollte das ja sofort laufen, aber ich
> bekomme eine Fehlermeldung, die ich nicht so recht nachvollziehen kann
> (vielleicht stehe ich beidfüßig auf dem Schlauch).
>
>
> In dem beiliegenden Bild ist ein Bildschirmausdruck direkt aus der
> WorkBench zu sehen. In den gelb markierten Bereichen liegt das
> Problem. Der untere Codeausschnitt ist direkt aus der aus der
> Mathematica Dokumentation, im oberen markierten Teil ist das Problem
> sichtbar. Hier sind die bei den links der Zuweisung stehenden
> Variablen nicht instanttiiert , die rechts des Gleichheitszeichens
> sehr wohl. Die Zuweisung soll liste[[ {i,j}]] =liste[[ {j,i}]] lauten
> und die beiden nicht in der richtigen Reihenfolge
> stehenden Variablen vertauschen. Die Variableninhalte sind im oberen
> Teil der WB zu sehen - sieht eigentlich alles gut aus. Kann mir jemand
> einen kurzen Tip geben, warum das hier nicht geht?
>
>
> Viele Grüße
>
> m.g.
>
>
> Michael Gamer
> Zur Römerbrücke 19
> 63456 Hanau
>
> Telefon: 06181 663363
> Fax: 06181 663362
> Mail: mg@XXXXXXX.de
>
>
>
> home: www.michaelgamer.de
>
>
>
>
>
>
>
>