Difference between revisions of "ApCoCoA-1:Examples Tutorial De List"
Line 18: | Line 18: | ||
Hier wurden aus der Liste der Zahlen von <tt>0</tt> bis <tt>11</tt> die Liste der Quadratzahlen (von <tt>0</tt> bis <tt>11</tt>) modulo <tt>12</tt> erzeugt. | Hier wurden aus der Liste der Zahlen von <tt>0</tt> bis <tt>11</tt> die Liste der Quadratzahlen (von <tt>0</tt> bis <tt>11</tt>) modulo <tt>12</tt> erzeugt. | ||
− | Sei | + | Sei <tt>L:=1..100;</tt>. Dann erzeugt <tt>G:=[N In L | Mod(N,2)=0];</tt> die Liste aller geraden Zahlen von 2 bis 100: <tt>G=[2,4,6,8,...,98,100]</tt>. Mit dem Befehl <tt>In</tt> kann man angeben, aus welcher Liste die Objekte ausgelesen werden sollen, die Bedingungen/Opertionen werden hinter einem <tt>|</tt> angegeben. So wir durch <tt>H:=[N^2 | N In L];</tt> die Liste aller Zahlen von 1 bis 100 quadriert erzeugt: <tt>H=[1,4,9,...,10000]</tt>. Wenn man mehr als eine Bedingung angeben möchte, so kann man dies mit Hilfe der Befehle <tt>And</tt> und <tt>Or</tt> tun, z.B. erzeugt <tt>I:=[N^2 | N In L And N<=10];</tt> die Liste <tt>I=[1,4,9,...,100]</tt>. |
− | |||
− | Hat man nun Listen in denen wieder Listen vorkommen, wie z.B. | + | Hat man nun Listen in denen wieder Listen vorkommen, wie z.B. <tt>LL:=[[1,4],3,[[9,7],6]];</tt>, so kann |
− | man mit | + | man mit <tt>L:=Flatten(LL);</tt> aus der Liste <tt>LL</tt> die Liste <tt>L=[1,4,3,9,7,6];</tt> machen. |
− | Der Befehl | + | Der Befehl <tt>Flatten(...);</tt> hat ein oder zwei Parameter, zuerst die Liste, welche vereinfacht werden |
soll und dann ggf. die Stufe der Vereinfachung. Gibt man keine Stufe der Vereinfachung an, so erzeugt | soll und dann ggf. die Stufe der Vereinfachung. Gibt man keine Stufe der Vereinfachung an, so erzeugt | ||
− | + | CoCoA die maximale Vereinfachung der Liste. Betrachten wir z.B. die Liste <tt>M:=[[[1,2],[4,7]],[3,2]]</tt>, | |
− | dann verursacht | + | dann verursacht <tt>Flatten(M,1);</tt> die Vereinfachung der Liste um eine Stufe, wir erhalten |
− | + | <tt>M:=[[1,2],[4,7],3,2]</tt>, also wurde eine Stufe der inneren Klammern aufgehoben. Nochmaliges anwenden | |
− | von | + | von <tt>Flatten(M,1);</tt> liefert dann die maximale Vereinfachung <tt>M:=[1,2,4,7,3,2]</tt>. |
− | |||
− | Der Befehl | + | Der Befehl <tt>Concat(...);</tt> macht aus mehreren Listen eine große Liste, wobei die |
erhaltene Liste so viele Stufen hat, wie die eingegebene Liste mit der höchsten Stufenzahl. | erhaltene Liste so viele Stufen hat, wie die eingegebene Liste mit der höchsten Stufenzahl. | ||
− | So erhält man | + | So erhält man <tt>[[4,8,0],[2],1,2]</tt>, wenn man <tt>L:=Concat([[4,8,0],[2]],[],[1,2]);</tt> |
− | in | + | in CoCoA ausführt. Wenn man nur ein Objekt an das Ende einer Liste anhängen möchte, so kann man <tt>Append(L,O);</tt> verwenden. Das Objekt <tt>O</tt> wird nach dem letzten Objekt der Liste <tt>L</tt> eingehängt, z.B. wird <tt>L=[[4,8,0],[2],1,2]</tt> durch <tt>Append(L,[7,2]);</tt> zu <tt>L=[[4,8,0],[2],1,2,[7,2]]</tt>. |
− | + | <center>[[Image:bsp_listen_1.png]]</center> | |
− | |||
− | |||
− | Man kann natürlich zwei Listen auch miteinander vergleichen, so liefert | + | Man kann natürlich zwei Listen auch miteinander vergleichen, so liefert <tt>Diff(L1,L2);</tt> die Liste der Elemente, in denen sich <tt>L1</tt> und <tt>L2</tt> unterscheiden. Mit <tt>First(L,N);</tt> erhält man die Liste der ersten <tt>N</tt> Elemente von <tt>L</tt> und mit <tt>Last(L,N);</tt> die Liste der letzten <tt>N</tt> Elemente von <tt>L</tt>. Braucht man mal die Länge einer Liste <tt>L</tt>, so liefert <tt>Len(L);</tt> die Antwort. |
− | + | <center>[[Image:bsp_listen_2.png]]</center> | |
− | |||
− | |||
Revision as of 13:08, 17 July 2008
Die List mit den Listen
Der Listenoperator in CoCoA ist ein sehr vielseitiges und auch kräftiges Hilfsmittel. Wenn immer es geht sollte man mit Listen arbeiten, da aufgrund der inneren Struktur von CoCoA auf diese und in ihnen ein sehr schneller Zugriff möglich ist.
Eine Liste ist keine Menge, so ist .
Man kann, wie vielleicht schon gesehen, Listen einfach durch Aufzählung ihrer Elemente angeben, z.B. L:=[0,1,2,3,4,5,6,7,8,9]. Die Liste trägt nun den Namen L und enthält 10 Elemente. Natürlich geht die Definition der Liste L auch einfacher: Der kürzeste Weg ist L:=0..9;, was ebenfalls das Anlegen einer Liste mit den Zahlen von 0 bis 9 in Reihenfolge verursacht.
Die leere Liste wird einfach mit [] erzeugt. An eine leere Liste können z.B. mittels Concat(...) innerhalb eines Programms immer wieder neue Teile angefügt werden. Wohingegen der Befehl NL:=NewList(5); eine Liste mit fünf leeren Plätzen erzeugt, welche dann einzeln belegt werden können. Diese Leerliste hat dann die Gestalt [Null,Null,Null,Null,Null]. Auf die einzelnen Elemente von L kann man jetzt durch Angabe der Position zugreifen, so liefert L[3]; die Zahl 2, also die Zahl, welche an dritter Stelle in der Liste L steht. Alternativ kann man auch mit Comp(L,3) auf den dritten Eintag von L zugreifen. Man kann aber nicht nur Daten aus einer bestimmten Position einer Liste auslesen, sondern genauso an eine bestimmte Position schreiben: So verursacht z.B. NL[3]:=3; das an dritter Stelle von NL der Wert 3 eingetragen wird: [Null,Null,3,Null,Null].
Wenn man nach einer längeren Konstruktion merkt, dass man etwas in einer Liste vergessen hat, so braucht man nicht alles neu machen. Mit Insert(L,S,O); wird in die Liste L an die Stelle S das Objekt O eingesetzt. Sei z.B. L:=[1,3,7,9]; (irgendwie fehlt da die 5), dann transformiert Insert(L,3,5); die Liste L in [1,3,5,7,9]. Hat sich nun ein ungewolltes Objekt in eine Liste, wie z.B. die 7 in die Liste K:=[2,4,6,7,8]; eingeschlichen, so kann man mit Remove(L,S); aus der Liste L die Stelle S wieder entfernen, d.h. Remove(K,4); liefert die gewünschte Liste K=[2,4,6,8].
Wenn man neue Listen mit bestimmten Eigenschaften der Inhalte erzeugen möchte so hat man mit CoCoA noch eine Menge Gestaltungsmöglichkeiten, z.B.
Hier wurden aus der Liste der Zahlen von 0 bis 11 die Liste der Quadratzahlen (von 0 bis 11) modulo 12 erzeugt.
Sei L:=1..100;. Dann erzeugt G:=[N In L | Mod(N,2)=0]; die Liste aller geraden Zahlen von 2 bis 100: G=[2,4,6,8,...,98,100]. Mit dem Befehl In kann man angeben, aus welcher Liste die Objekte ausgelesen werden sollen, die Bedingungen/Opertionen werden hinter einem | angegeben. So wir durch H:=[N^2 | N In L]; die Liste aller Zahlen von 1 bis 100 quadriert erzeugt: H=[1,4,9,...,10000]. Wenn man mehr als eine Bedingung angeben möchte, so kann man dies mit Hilfe der Befehle And und Or tun, z.B. erzeugt I:=[N^2 | N In L And N<=10]; die Liste I=[1,4,9,...,100].
Hat man nun Listen in denen wieder Listen vorkommen, wie z.B. LL:=[[1,4],3,[[9,7],6]];, so kann man mit L:=Flatten(LL); aus der Liste LL die Liste L=[1,4,3,9,7,6]; machen. Der Befehl Flatten(...); hat ein oder zwei Parameter, zuerst die Liste, welche vereinfacht werden soll und dann ggf. die Stufe der Vereinfachung. Gibt man keine Stufe der Vereinfachung an, so erzeugt CoCoA die maximale Vereinfachung der Liste. Betrachten wir z.B. die Liste M:=[[[1,2],[4,7]],[3,2]], dann verursacht Flatten(M,1); die Vereinfachung der Liste um eine Stufe, wir erhalten M:=[[1,2],[4,7],3,2], also wurde eine Stufe der inneren Klammern aufgehoben. Nochmaliges anwenden von Flatten(M,1); liefert dann die maximale Vereinfachung M:=[1,2,4,7,3,2].
Der Befehl Concat(...); macht aus mehreren Listen eine große Liste, wobei die erhaltene Liste so viele Stufen hat, wie die eingegebene Liste mit der höchsten Stufenzahl. So erhält man [[4,8,0],[2],1,2], wenn man L:=Concat([[4,8,0],[2]],[],[1,2]); in CoCoA ausführt. Wenn man nur ein Objekt an das Ende einer Liste anhängen möchte, so kann man Append(L,O); verwenden. Das Objekt O wird nach dem letzten Objekt der Liste L eingehängt, z.B. wird L=[[4,8,0],[2],1,2] durch Append(L,[7,2]); zu L=[[4,8,0],[2],1,2,[7,2]].
Man kann natürlich zwei Listen auch miteinander vergleichen, so liefert Diff(L1,L2); die Liste der Elemente, in denen sich L1 und L2 unterscheiden. Mit First(L,N); erhält man die Liste der ersten N Elemente von L und mit Last(L,N); die Liste der letzten N Elemente von L. Braucht man mal die Länge einer Liste L, so liefert Len(L); die Antwort.