DMUG-Archiv 2012

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Selectionort aus Mathematica Dokumentation

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  
> 
> 
> 
> 
> 
> 
> 
> 




Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html