Difference between revisions of "ApCoCoA-1:Examples Tutorial De List"

From ApCoCoAWiki
 
(One intermediate revision by the same user not shown)
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 \texttt{L:=1..100;}. Dann erzeugt \texttt{G:=[N In L | Mod(N,2)=0];} die Liste aller geraden Zahlen von 2 bis 100: \texttt{G=[2,4,6,8,...,98,100]}. Mit dem Befehl \texttt{In} kann man angeben, aus welcher Liste die Objekte ausgelesen werden sollen, die Bedingungen/Opertionen werden hinter einem \texttt{|} angegeben. So wir durch \texttt{H:=[N\textasciicircum 2 | N In L];} die Liste aller Zahlen von 1 bis 100 quadriert erzeugt: \texttt{H=[1,4,9,...,10000]}. Wenn man mehr als eine Bedingung angeben möchte, so kann man dies mit Hilfe der Befehle \texttt{And} und \texttt{Or} tun, z.B. erzeugt \texttt{I:=[N\textasciicircum 2 | N In L And N<=10];} die Liste \texttt{I=[1,4,9,...,100]}.
+
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>.
\medskip
 
  
Hat man nun Listen in denen wieder Listen vorkommen, wie z.B. \texttt{LL:=[[1,4],3,[[9,7],6]];}, so kann  
+
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 \texttt{L:=Flatten(LL);} aus der Liste \texttt{LL} die Liste \texttt{L=[1,4,3,9,7,6];} machen.  
+
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 \texttt{Flatten(...);} hat ein oder zwei Parameter, zuerst die Liste, welche vereinfacht werden  
+
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 \texttt{M:=[[[1,2],[4,7]],[3,2]]},  
+
CoCoA die maximale Vereinfachung der Liste. Betrachten wir z.B. die Liste <tt>M:=[[[1,2],[4,7]],[3,2]]</tt>,  
dann verursacht \texttt{Flatten(M,1);} die Vereinfachung der Liste um eine Stufe, wir erhalten  
+
dann verursacht <tt>Flatten(M,1);</tt> die Vereinfachung der Liste um eine Stufe, wir erhalten  
\texttt{M:=[[1,2],[4,7],3,2]}, also wurde eine Stufe der inneren Klammern aufgehoben. Nochmaliges anwenden  
+
<tt>M:=[[1,2],[4,7],3,2]</tt>, also wurde eine Stufe der inneren Klammern aufgehoben. Nochmaliges anwenden  
von \texttt{Flatten(M,1);} liefert dann die maximale Vereinfachung \texttt{M:=[1,2,4,7,3,2]}.
+
von <tt>Flatten(M,1);</tt> liefert dann die maximale Vereinfachung <tt>M:=[1,2,4,7,3,2]</tt>.
\medskip
 
  
Der Befehl \texttt{Concat(...);} macht aus mehreren Listen eine große Liste, wobei die  
+
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 \texttt{[[4,8,0],[2],1,2]}, wenn man \texttt{L:=Concat([[4,8,0],[2]],[\,],[1,2]);}
+
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 {\CoCoA} ausführt. Wenn man nur ein Objekt an das Ende einer Liste anhängen möchte, so kann man \texttt{Append(L,O);} verwenden. Das Objekt \texttt{O} wird nach dem letzten Objekt der Liste \texttt{L} eingehängt, z.B. wird \texttt{L=[[4,8,0],[2],1,2]} durch \texttt{Append(L,[7,2]);} zu \texttt{L=[[4,8,0],[2],1,2,[7,2]]}.
+
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>.
\begin{center}
+
<center>[[Image:bsp_listen_1.png]]</center>
\includegraphics[width=0.55\textwidth]{./../images/bsp_listen_1}
 
\end{center}
 
  
Man kann natürlich zwei Listen auch miteinander vergleichen, so liefert \texttt{Diff(L1,L2);} die Liste der Elemente, in denen sich \texttt{L1} und \texttt{L2} unterscheiden. Mit \texttt{First(L,N);} erhält man die Liste der ersten \texttt{N} Elemente von \texttt{L} und mit \texttt{Last(L,N);} die Liste der letzten \texttt{N} Elemente von \texttt{L}. Braucht man mal die Länge einer Liste \texttt{L}, so liefert \texttt{Len(L);} die Antwort.
+
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.
\begin{center}
+
<center>[[Image:bsp_listen_2.png]]</center>
\includegraphics[width=0.45\textwidth]{./../images/bsp_listen_2}
 
\end{center}
 
  
  
 +
 +
 +
----
 +
 +
Weiter geht's im Kapitel [[ApCoCoA:Fundamentals_Tutorial_De_Ring|Wo bin ich? (... und wie kann ich umziehen?)]].
 +
 +
----
  
  

Latest revision as of 19: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.

List constructor.png

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

Bsp listen 1.png

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.

Bsp listen 2.png




Weiter geht's im Kapitel Wo bin ich? (... und wie kann ich umziehen?).