Haskell - Ein Einstieg

Wir haben uns bereits etwas mit Haskell auseinandergesetzt. Jetzt sollst du selbst mit Haskell programmieren. Rufe dazu die Seite https://repl.it auf (oder nutze den QR-Code rechts).
Öffne eine Haskell-Umgebung. Rechts findest du die Konsole, in der Mitte kannst du Skriptfiles erstellen.
- Beispiel:
3 + 4
3.0 + 4
Hallo Welt.erzeugt.
- Nutze dazu die Funktion putStrLn().
Um Fehler vorzubeugen, füge eine Mainroutine hinzu, wie rechts abgebildet.
- Schreibe die Funktion doubleMe in einen File.
- Erweitere deinen File um eine Funktion doubleUs, die zwei Eingaben bekommt und das Doppelte der Eingabewerte summiert und das Ergebnis ausgibt. Nutze hierfür doubleMe.
- Teste beide Funktionen.
main = do
putStrLn(running
)
if Bedingung
then Aktion 1
else Aktion 2
- Schreibe die Funktion doubleSmallNumber.
Verwende hierfür die if-Struktur.
numbers = [1,2,3,4]
Teste anschließend die dir bereits bekannten Funktionen tail, init, head und last.
- Teste die Funktion length, indem du sie auf alle Listen anwendest.
- Teste nun die Funktion null.
- Teste die Funktion reverse.
- Teste die Funktionen take und drop, indem du die Eingaben
take 3 list1
unddrop 3 list1
in der Konsole ausführst. - Teste die Funktionen minimum, maximum, sum und product.
list1 = [1..10]
list2 = []
list3 = [6,8,9,10,3]
https://www.tutory.de/entdecken/dokument/e28fbb55
Um Listen erzeugen zu lassen, helfen Bedingungen.
Die Syntax ist [Rechenanweisung | Bedingungen für die Variablen].
Zum Beispiel erzeugt [x^2|x <- [1..10], mod x 2 ==0] eine Liste, in der die Quadrate der geraden Zahlen zwischen 1 und 10 enthalten sind.
- es sind nur gerade Zahlen enthalten, die kleiner sind als 10
- es sind nur ungerade Zahlen enthalten, die zwischen 10 und 20 liegen
- es sind alle Zahlen enthalten, die zum Einmaleins der 3 gehören (also bis 30).
- es sind alle Zahlen zwischen 0 und 100 enthalten, die sowohl durch 7 als auch durch 5 teilbar sind.
Erzeuge eine Liste der Zahlen von 1 bis 70, wie sie im Spiel Verflixte 7 entsteht, wobei der Einfachheit halber die durch 7 teilbaren Zahlen durch 0 ersetzt werden sollen.
- Beginne mit einer Liste der Zahlen bis 50.
- Filtere alle Zahlen aus, die keine Primzahlen sind, weil sie durch eine Primzahl geteilt werden können.
- Füge bei der Filterung Ausnahmen hinzu, so dass die Primzahlen selbst nicht ausgefiltert werden.
Verwende dafür die logischen Operatoren
und && und oder ||. - Es genügt die Primzahlen bis 11 in der Filterung zu verwenden.
Primzahlen:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
Aus der Mathematik kennst du bereits Tupel. Dir sind Paare und Tripel bekannt, zum Beispiel als Koordinaten von Punkten in der Ebene oder im Raum. Haskell kann ebenfalls Tupel bilden. Die Anzahl der Elemente ist dabei nicht eingeschränkt und es können auch unterschiedliche Typen verwendet werden, zum Beispiel (1, Amsel).
Die Schreibweise unterscheidet sich nicht von der Mathematik. Tupel werden durch runde Klammern umschlossen, die Reihenfolge der Elemente kann nicht beliebig vertauscht werden. Die einzelnen Elemente werden durch Kommata getrennt.
- Schreibe die Funktion add (x1, y1, z1) (x2,y2,z3), die die Elemente der beiden Tupel addiert.
- Schreibe weitere Funktionen sub und mult, die die Elemente subtrahiert bzw. multipliziert.
- Weshalb ist eine solche Funktion für die Division nicht ohne weiteres möglich?
https://www.tutory.de/entdecken/dokument/e28fbb55
Erstelle eine Liste von Dreiecken, deren Seitenlängen zwischen 1 cm und 10 liegen.
- Verwende ein Tupel (a,b,c), das als Dreieck mit den Seitenlängen a, b und c verstanden wird.
- Weise jeder Variablen in der Bedingung der Liste ihre möglichen Werte zu.
Erstelle eine Liste von rechtwinkligen Dreiecken, deren Seitenlänge zwischen 1 cm und 10 cm liegen.
- Dreiecke sind rechtwinklig, wenn in ihnen die Seitenbeziehung a2 + b2= c2 gilt.

Ein rechtwinkliges Dreieck hat einen Umfang von 24 cm. Die Seitenlängen sind ganzzahlig und bewegen sich zwischen 1 cm und 10 cm.
Welche Seitenlängen sind möglich?
- Den Umfang eines Dreiecks berechnet man mit U = a+b+c.
- Als zusätzliche Schwierigkeit sorge dafür, dass spiegelbildliche Dreiecke nur einmal ausgegeben werden.
- Beschränke dich auf die Ebene, Punkte haben also eine x- und eine y-Koordinate.
- Den Abstand eines Punktes P1 von einem Punkt P2 berechnet man mit der folgenden Formel:
d2= (x1-x2)2 + (y1-y2)2, wobei d der Abstand ist.
Es handelt sich hierbei um eine Anwendung des Satzes des Pythagoras. - Die Wurzel berechnet man in Haskell mit der Funktion sqrt.
- Da die Wurzel eine Kommazahl ausgibt, möchte sie einen entsprechenden Datentyp als Eingabe bekommen. Nutze dafür die Funktion fromIntegal.
- Anders als wir es gewohnt sind, schachtelt Haskell Funktionen, indem Klammern gesetzt werden, die vor dem Funktionsnamen beginnen und nach dem Argument enden.
Zum Beispiel: sqrt (fromIntegral (x+y))
https://www.tutory.de/entdecken/dokument/e28fbb55


