DMUG-Archiv 2012

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

Re: Selectionort aus Mathematica Dokumentation

Au weia!

Ich wußte ja ich stehe neben mir, aber so weit -peinlich, peinlich!. Das ist so ein typischer Fehler, wenn man Code 
nicht selbst schreibt, sondern von irgendwoher (hier aus der Mathematica Doku) kopiert. Danke für die schnelle Antwort, 
jetzt kann das neue Jahr ja kommen.


Viele Grüße

m.g. 


Am 26.12.2012 um 23:11 schrieb Patrick Scheibe <patrick@XXXXXXX.de>:

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



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

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