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
|