Lieber Herr Anrecht,
betrifft:
>Ich moechte einen assozativen Speicher der Form
>
>NODE[1]=a
>NODE[15]=c
>NODE[10]=b
>..
>NODE[i_Integer]=_
>
>einrichten. Kein Problem, aber wie komme ich an die Liste
>
>{{1,a},{10,b},{15,c}}.
>
>Mit ??NODE kann ich diese Information nahezu anzeigen, aber nicht
>weiterverarbeiten.
>Der Index i kann ausserdem sehr gross werden, so dass ich mit einer
>Zaehlschleife
>nicht weiterkomme.
>
>Wer kennt einen passenden Trick?
Die Antwort auf Ihre Frage lautet:
Partition[Level[DownValues[NODE],{-1}],2]
Erklaerung:
Mit DownValues[NODE] erhalten Sie in etwa die Information, die
Sie auch mit ?? aufrufen koennen. (Allerdings nur sogenannte
DownValue-Zuweisungen)
In[1]:=
DownValues[NODE]
Out[1]=
{HoldPattern[NODE[1]]:>a,HoldPattern[NODE[10]]:>b,HoldPattern[NODE[15]]:>c}
Aus dieser Liste koennen Sie mit Level[...,{-1}] die Zahlen und Symbole
herausfischen, da Sie in diesem Fall auf der untersten Eben der Listen-
struktur anzutreffen sind.
In[2]:=
Level[%,{-1}]
Out[2]=
{1,a,10,b,15,c}
Nun gilt es noch die Zahlen mit den folgenden Symbolen in Unterlisten
zusammenzufassen. Dies geschieht mit Partition[...,2].
In[3]:=
Partition[%,2]
Out[3]=
{{1,a},{10,b},{15,c}}
Ich hoffe, dass ich damit Ihre Frage treffend beantwortet haben.
MfG, Markus van Almsick
|