Hoi Andreas,
Während im normalen Programmdurchlauf stets die Fehlermeldung "Label L11
not found" erscheint, läuft das Programm mit "Trace" fehlerfrei.
Kann mir das das jemand begründen?
Aus der Hilfe tutorial/LoopsAndControlStructures
" Note that you can use Goto in a particular Mathematica procedure
only when the Label it specifies occurs as an element of the same
Mathematica procedure."
mittels Trace[] errichteten Sie eine procedure. Das geht auch
mit runden Klammern, see tutorial/TheFourKindsOfBracketingInMathematica:
In[79]:= (
r1 = 2; r2 = r3 = r4 = r5 = 0;
If[r1 == 0, Goto[end]];
r2++; r3++;
r1--;
If[r1 == 0, Goto[L6]];
Label[L5]; r1--;
Label[L6]; r4++; r5++;
r3--;
If[r3 != 0, Goto[L6]];
Label[L9]; r4++; r2--;
If[r2 != 0, Goto[L9]];
Label[L11]; r3++; r4--;
If[r4 != 0, Goto[L11]];
Label[L13]; r2++; r5--;
If[r5 != 0, Goto[L13]];
If[r1 != 0, Goto[L5]];
Label[L16]; r3--;
If[r3 != 0, Goto[L16]];
Label[L18]; r2--; r1++;
If[r2 != 0, Goto[L18]];
Label[end]; {r1, r2, r3, r4, r5}
)
Out[79]= {1, 0, 0, 0, 0}
und sonst noch auf vielerlei Art (anonymer Block, List, ...).
Übrigens, eines der unsinnigsten Mathematicaprogramme ist
In[80]:= Label[hohl]; Goto[hohl];
und das funktioniert leider unendlich lange, obwohl es keine procedure ist.
In[82]:= Label[otto];
In[83]:= Goto[otto]
During evaluation of In[83]:= Goto::nolabel: Label otto not found. >>
Out[83]= Hold[Goto[otto]]
Gruss
jemand.