»Haskell « »Programmiersprache Haskell:« • benannt nach Haskell B. Curry Programmierumgebung Hugs • einer der Pioniere des λ-Kalkül • Haskell Users Gofer System • erste Spezifikation der Sprache Ende 80er Jahre • frei erhältlicher Interpreter • aktuelle Version: Haskell 98 • für alle gängigen Plattformen • Download, Tutorials, usw.: http://www.haskell.org/ c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 13 »funktionale Programme in Haskell « c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 14 »funktionale Programme in Haskell cont. « • Definitionen von Funktionen und anderen Werten durch Gleichungen • lies ‘::’ als ‘hat Typ’ oder ‘ist vom Typ’ • Beispiele: • Definition assoziiert Namen (Identifikator) mit Wert eines bestimmten Typs size :: Int size = 12 + 13 • Syntax: square :: Int -> Int square n = n * n <name> :: <type> <name> = <expression> c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 15 c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 16 zwei Arten von Dateistilen: zwei Arten von Dateistilen: cont • Skripte (Extension ‘.hs’): • literate Skripte (Extension ‘.lhs’): alles ist Programmtext, sofern nicht explizit als Kommentar gekennzeichnet – alles ist Kommentar, sofern nicht am Zeilenanfang durch ‘>’ als Programmzeile gekennzeichnet – literat . . . ‘wörtlich’ – Kommentare bis Zeilenende eingeleitet durch zwei aufeinanderfolgende ‘-’ – Abschnittskommentare zwischen ‘{-’ und ‘-}’ c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 17 Beispiel eines Skripts c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 18 Beispiel eines literaten Skripts {- Die Berechnung der Funktion Fakultät ist ein Standardbeispiel fuer Rekursion. ... mehrere Zeilen Kommentartext ... -} -- Berechnung der Fakultät mit Konditional if > fak :: Int -> Int > fak n = if n == 0 then 1 else n * fak (n - 1) fak :: Int -> Int Eine Variante mit Pattern-Matching: fak n = if n == 0 then 1 else n * fak (n - 1) > fak 0 = 1 > fak n = n * fak (n - 1) c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 19 c Prof. Dr. D. Rösner; erstellt: 5. April 2007 Sommer 2007, Programmierparadigmen (PGP), 20