12

Informatik (Fach) / Haskell (allg.) (Lektion)

Allgemeine Fragen

Diese Lektion wurde von scarvy erstellt.

Lektion lernen

Diese Lektion ist leider nicht zum lernen freigegeben.

Anzeige
  • Was zeichnte Haskell als Programmiersprache aus? -rein funktionale Programmiersprache. -Funktionen geben nur Werte zurück, ändern aber nicht den Zustand eines Programms (d. h. Funktionen haben keine Nebeneffekte). Das Ergebnis einer Funktion hängt deshalb nur von den Eingangsparametern ab, und nicht davon, wann oder wie oft die Funktion aufgerufen wird -nicht-strikt. Es werden nur Ausdrücke ausgewertet, die für die Berechnung des Ergebnisses gebraucht werden.   Typsystem Haskell ist stark typisiert. Es wird also zum Beispiel streng zwischen Wahrheitswerten, Zeichen, ganzen Zahlen, Gleitkommazahlen und Funktionen von und zu verschiedenen Typen unterschieden. Typinferenz Syntax Haskell unterscheidet Groß- und Kleinschreibung. Bezeichner, die mit einem Großbuchstaben beginnen, stehen für Typ- und Wertkonstruktoren. Bezeichner, die mit einem Kleinbuchstaben beginnen, stehen für Typvariablen, Funktionen und Parameter.  
  • Was ist "pattern matching"? Programmierung Haskell erlaubt Mustervergleiche (engl. „pattern matching“). So nennt man die Verwendung von Konstruktortermen als formale Parameter. Dabei sind die Parameterterme die Muster (engl. „pattern“) der Funktionsargumente.fak :: Integer -> Integerfak 0 = 1                                    < [Pattern]fak n = n * fak (n-1)                    <          
  • Was versteht man unter Typinferenz? Haskell erlaubt Typvariablen. Damit können Funktionen sehr allgemein formuliert werden. Wird eine allgemeingehaltene Funktion für bestimmte Typen verwendet, werden automatisch die Typen abgeglichen (Typinferenz). Die Funktion map wendet eine beliebige Funktion auf die Elemente einer Liste an. Ihr Typ wird so angegeben: map :: (a -> b) -> [a] -> [b]
  • Was ist eine Funktion höherer Ordnung? Nenne ein Beispiel für Funktion dafür. - Haskell unterstützt Funktionen höherer Ordnung (Funktionale). -haben Funktionen als Eingabeparameter bzw. Funktionen als Ergebnis -können Argumente von anderen sein -Funktionen sind Daten gleichberechtigt und können über beliebige Datentypen definiert sein  Ein Beispiel ist die map-Funktion, die eine Funktion f auf jedes Element eines Datentypes (hier Liste) anwendet   > -- wendet eine Funktion (a->b) auf eine ganze Liste [a] an> map' :: (a -> b) -> [a] -> [b]> map' f     [] = []> map' f (x:xs) = f x : map' f xs> -- als Listenbeschreibung> map'' f xs = [f a | a <- xs]
  • Nenne TypKlassen von Haskell. Die folgenden Typklassen sind vorde niert: Enum | AufzählungenEq | Gleichheit und UngleichheitOrd | OrdnungsrelationNum | Numerische OperationenRead | EinlesenShow | Ausgeben -Schlüusselwort deriving ist es möglich, den Compileranzuweisen, für benutzerde nierte Typen Funktionen einigerTypklassen automatisch zu generieren   Bspl.:            data Farbe = Rot | Gruen | Blau
  • Datentyp von einem Baum > data Tree = Leaf a |Nil |Br (Tree a) (Tree a) deriving showbzw.: data Tree = Leaf Int | Branch Int Tree Tree  Das Beispiel zeigt die Datenstruktur eines mit ganzen Zahlen beschrifteten binären Baumes. Solch ein Baum Tree besteht entweder aus einem Blatt (Leaf Int) oder einer Verzweigung (Branch Int t1 t2), wobei t1 und t2 die Teilbäume darstellen, die wiederum die Struktur Tree haben. Zur Definition dieser Datenstruktur wurde sowohl der einstellige Konstruktor Leaf als auch der dreistellige Konstruktor Branch verwendet.
  • Was versteht man unter "list comprehension"? + Beispiel Haskell erlaubt eine Notation für die Listenverarbeitung (list comprehensions). So können Zahlenfolgen mit zwei Punkten (..) angedeutet werden: [0..5] = [0,1,2,3,4,5] ['a'..'e'] = ['a','b','c','d','e'] = "abcde" [0,2..10] = [0,2,4,6,8,10]
  • Was ist ein Konstruktor? Ein Konstruktor konstruiert neue Typen aus gegebenen. Bspl: Musik                       Note (c,1/4)
  • Was versteht man unter Currifizierung? - Funktionen erlauben Currying.  - in anderen Sprachen Tupel als Argumente an Funktionen übergibt, also Funktionstypen der Form (a, b) -> c - in Haskell die Curry-Form a -> b -> c üblicher. Damit wird die partielle Auswertung von Funktionen bequem möglich.
  • Was ist ein ADT? Ein Abstrakter Datentyp (ADT) ist ein Verbund von Daten zusammen mit der Definition aller zulässigen Operationen, die auf sie zugreifen.
  • Anzeige
  • Was ist lazy evaluation? Welche Vor- und Nachteile hat sie? ist eine Technologie , bei der das Ergebnis eines Ausdrucks nur so weit berechnet wird, wie es gerade benötigt wird. > squares n = (n*n) : squares (n+1)  - Die Funktion squares berechnet die unendliche Liste aller Quadratzahlen beginnend bei n. Das Quadrat von 3 ließe sich also durch den Ausdruck   squares 0 !! 3   berechnen – dabei holt   l !! x   das Element an der Position x aus der Liste l. Ohne Lazy Evaluation würde der Aufruf von squares 0 nicht terminieren.   squares 0 !! 3 → 0*0 : squares (0+1) !! 3 → squares (0+1) !! 2 → (0+1)*(0+1) : squares (0+1+1) !! 2 … → (0+1+1+1)*(0+1+1+1) : squares (0+1+1+1+1) !! 0 → (0+1+1+1)*(0+1+1+1) → 9
  • Wie führt man eine Typklasse ein (Beispiel)? 01 class Eq a where 02 (==),(/=) :: a -> a -> Bool Die Typklasse Eq besteht aus allen Typen für die (==) und (/=) definiert werden. Der Typ der Funktionen ist dann folgendermassen eingeschränkt auf die Typklasse: 01 (==),(/=) :: Eq a => a -> a -> Bool