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