hmmm,
hatte mich auch etwas gewundert. zweck der übung war das hooked irgendwie zu kapseln.
hoffe das package ist soweit konsistent.
l.g. robert
BeginPackage["MyPart`"];
Part::usage="Part originated form 0 instead of 1";
Begin["`Private`"];
hooked=True;
Unprotect[Part];
Part[a_List, seq__] /; hooked :=
Block[{hooked = False}, Part[a, Sequence @@ ( # + 1 & /@ {seq})]];
Protect[Part];
End[];
EndPackage[];
{1,2,3}[[1]]
Out[11]=
2
MyPart`Private`hooked=False;
{1,2,3}[[1]]
Out[13]=
1
-----Original Message-----
From: Jens-Peer Kuska [mailto:kuska@XXXXXXX.de]
Sent: Tuesday, March 14, 2006 5:22 PM
To: Nowak Robert; demug@XXXXXXX.ch
Subject: Re: Antwort: Re: Indizierung von Tables mit Null beginnen.
Hallo,
und was soll diese "behübschung" bringen ??
Als erstes ist das vom Module[] erzeugte
hooked$xx nach dem Verlassen des Modules nicht
mehr definiert und True ist es schon garnicht.
Man kann das ganze auch nicht mehr auschalten,
weil
man nur unter Verrenkungen an hooked$xx heran
kommt.
Das ganze funktioniert auch nur deshalb, weil
Condition[]
alles was nicht False ist als True ansieht.
Das trägt also nicht besonders zur
Verständlichkeit bei.
Gruß
Jens
----- Original Message -----
From: "Nowak Robert" <robert.nowak@XXXXXXX.at>
To: "Jens-Peer Kuska"
<kuska@XXXXXXX.de>;
<demug@XXXXXXX.ch>
Sent: Tuesday, March 14, 2006 3:58 PM
Subject: RE: Antwort: Re: Indizierung von Tables
mit Null beginnen.
| man lernt nie aus,
|
| habe mir erlaubt das noch zu behübschen.
|
| l.g. robert
|
| Module[{hooked = True},
| Unprotect[Part];
| Part[a_List, seq__] /; hooked := Block[{hooked
= False}, Part[a, Sequence @@ ( # + 1 & /@
{seq})]];
| Protect[Part];
| ]
|
| -----Original Message-----
| From: Jens-Peer Kuska
[mailto:kuska@XXXXXXX.de]
| Sent: Tuesday, March 14, 2006 11:45 AM
| To: Nowak Robert; demug@XXXXXXX.ch
| Subject: Re: Antwort: Re: Indizierung von Tables
mit Null beginnen.
|
|
| Hallo,
|
| ja und ?? was ist mit
| Unprotect[Part]
| $hooked = False;
| Verbatim[Part][a_, seq___] /; Not[ $hooked] :=
| Block[{$hooked = True}, Part[a, Sequence @@ (
(#
| + 1) & /@ {seq})]]
| Protect[Part]
|
| Gruß
|
| Jens
|
| ----- Original Message -----
| From: "Nowak Robert" <robert.nowak@XXXXXXX.at>
| To: <demug@XXXXXXX.ch>
| Sent: Tuesday, March 14, 2006 10:42 AM
| Subject: FW: Antwort: Re: Indizierung von Tables
| mit Null beginnen.
|
|
||
|| wünschenswert wäre es doch (nicht nur bei Part
| sondern generell bei allen system funktionen)
bei
| umdefinition von Part[] innerhalb der
| neudefinition auf das originale Part[] zugreifen
| zu können.
||
|| in etwa so auf die art:
||
|| NewPart[x_List, n_Integer] := Part[x, n + 1];
|| Unprotect[Part];
|| Part /: Part[x_List, n_Integer] := NewPart[x,
| n];
|| Protect[Part];
||
|| funktioniert aber so nicht weil in der
| neudefinition von Part[] aufs eben auch auf das
| neue Part[] zugegriffen wird und somit eine
nicht
| sinnvolle rekursion erzeugt wird.
||
|| l.g. robert
||
|| -----Original Message-----
|| From: Jens-Peer Kuska
| [mailto:kuska@XXXXXXX.de]
|| Sent: Monday, March 13, 2006 1:50 PM
|| To: Nowak Robert; Udo und Susanne Krause
|| Cc: Richard Gollreiter; demug@XXXXXXX.ch
|| Subject: Re: Antwort: Re: Indizierung von
Tables
| mit Null beginnen.
||
||
|| Hallo,
||
|| also die Bemerkung "fast keine Zeit verbraucht"
| is
|| ja wohl
|| ein Witz, man probiere
||
|| SetAttributes[myPart, HoldFirst]
|| myPart[a_, i_Integer] := a[[i + 1]]
|| SetAttributes[udoPart, HoldFirst]
|| udoPart[a_, i_Integer] := First[RotateLeft[a,
| i]]
|| Timing[
|| Table[
|| k = Random[Integer, {0, Length[test] - 1}];
|| myPart[test, k], {100000}
|| ]
|| ] // First
|| im Gegensatz zu
|| Timing[
|| Table[
|| k = Random[Integer, {0, Length[test] - 1}];
|| udoPart[test, k], {100000}
|| ]
|| ] // First
||
|| das Erste dauer bei mir 1.266 Sekunden, die
|| Version mit
|| RotateLeft[] is nach unglaublichen 144.14
| Sekunden
|| fertig.
||
|| Gruß
|| Jens
||
|| ----- Original Message -----
|| From: "Nowak Robert" <robert.nowak@XXXXXXX.at>
|| To: "Udo und Susanne Krause"
|| <su.krause@XXXXXXX.ch>; "Jens-Peer Kuska"
|| <kuska@XXXXXXX.de>
|| Cc: "Richard Gollreiter" <RGollreiter@XXXXXXX.de>; <demug@XXXXXXX.ch>
|| Sent: Monday, March 13, 2006 12:05 PM
|| Subject: RE: Antwort: Re: Indizierung von
Tables
|| mit Null beginnen.
||
||
||| hallo udo,
|||
||| > Part /: Part[x_List, n_Integer] :=
|| First[RotateLeft[x, n]]
|||
||| wie funktioniert deine lösung eigentlich,
wieso
|| wird für das rotieren scheinbar keine zeit
|| verbraucht ?
||| wird das array nur ein einziges mal rotiert
und
|| bei den individuellen zugriffen nicht mehr wenn
|| ja, wodurch ?
|||
||| l.g. robert
|||
||
|