Logo: Listen
Neben der Turtle-Grafik spielen die Listen in Logo eine gewisse Rolle, zumal Lisp der Pate für Logo ist.
Was ist eine Liste?
BearbeitenIn Logo ist eine Liste ein Konstrukt, bei der Elemente innerhalb einer eckigen Klammer stehen. Beispiel für Listen:
[ rot gelb gruen cyan blau magenta ] [ Dies ist ein Satz in einer Liste] [ 1 3 6 10 15 21 ]
Eine Liste kann wiederum auch Listen enthalten:
[ [ Brot Butter ] [ Milch Kase ] ]
Eine Liste kann auch leer sein:
[]
Überhaupt hat eine Liste viel Ähnlichkeit mit einer Menge.
Wie bekommt man Elemente in eine Liste?
BearbeitenMan kann eine Liste schon vordefinieren:
MAKE "Wochentage [Montag Dienstag Mittwoch Donnerstag Freitag]
Man kann auch ein Element in eine Liste hinzufügen:
MAKE "Tiere LPUT Katze :Tiere
Wenn die Liste Tiere vorher so aussah: [Hund Meerschweinchen Schildkröte], dann enthält sie danach: [Hund Meerschweinchen Schildkröte Katze].
Wie läßt sich feststellen, ob ein Element in einer Liste enthalten ist?
BearbeitenDas läßt sich mit der logischen Funktion MEMBERP Element Liste erreichen.
Sieb des Erastothenes
BearbeitenAls Beispiel für ein Programm mit Listen soll das Sieb des Eratothenes dienen. Das Sieb des Eratosthenes ermittelt aus einem Intervall der natürlichen Zahlen, von 2 bis zu einer fest vorgegebenen Obergrenze, alle Primzahlen durch heraussieben. Normalerweise wird so etwas mit einem Array realisiert. Man gibt vor, alle Zahlen von 2 bis zur Obergrenze seien Primzahlen, und entfernt dann alle Vielfachen von einer Primzahl angefangen mit der 2.
Da es keine Arrays in Logo gibt, muss man das Ganze etwas anders realisieren. Man nimmt zwei Listen, nämlich P (liste aller Primzahlen) und NP (Liste aller Nichtprimzahlen). Die Liste der Nichtprimzahlen ist hier besonders wichtig. Beide Listen sind zu Beginn leer. Wie wird nun vorgegangen? Genau umgekehrt; man geht davon aus, alle Zahlen seien keine Primzahl. Man beginnt mit der 2, und schaut nach, ob 2 in NP einthalten ist. Das ist nicht der Fall, also ist 2 eine Primzahl. Also wird 2 zur Liste P hinzugefügt, und alle Vielfachen von 2, bis zu einer gewissen Grenze, NP hinzugefügt. Danach kommt der nächste Primzahlkandidat.
TO PRIMZAHL :OBERGRENZE MAKE "WERT 1 REPEAT :OBERGRENZE MAKE "WERT :WERT + 1 IF NOT MEMBERP :WERT :NP PRINT :WERT UNTERPRIM :OBERGRENZE :WERT END
TO UNTERPRIM :OBERGRENZE :WERT MAKE "ADDER :WERT MAKE "P LPUT :WERT :P REPEAT :OBERGRENZE / :WERT MAKE "ADDER :ADDER + :WERT UNTERUNTERPRIM :ADDER :WERT END
TO UNTERUNTERPRIM :ADDER :WERT MAKE "NP LPUT :ADDER :NP END
TO LOESCHEN MAKE "P MAKE "NP 1 END