DMUG-Archiv 2006

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

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

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

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