1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3

Werbung
! 1. Prinzipien der funktionalen Programmierung
! 2. Deklarationen
! 3. Ausdrücke
! 4. Muster (Patterns)
! 5. Typen und Datenstrukturen
! 6. Funktionale Programmiertechniken
III.2 Deklarationen - 1 -
Deklarationen
len :: [Int] -> Int
len []
len (kopf : rest)
=
=
0
1 + len rest
square :: Int -> Int
square x = x * x
Typdeklarationen
Funktionsdeklarationen
Programm in Haskell: Folge von linksbündig untereinander stehenden Deklarationen
III.2 Deklarationen - 2 -
Deklarationen
len :: [Int] -> Int
len []
len (kopf : rest)
=
=
0
1 + len rest
square :: Int -> Int
square x = x * x
var
::
type
,
decl
var
pat
=
exp
III.2 Deklarationen - 3 -
Auswertungsstrategie
square :: Int -> Int
square x = x * x
square (12 - 1)
square 11
(12 - 1) * (12 - 1)
11 * (12 - 1)
(12 - 1) * 11
11 * 11
121
strikte Auswertung (call-by-value), innen links
nicht-strikte Auswertg. (call-by-name), außen links
III.2 Deklarationen - 4 -
Bedingte definierende Gleichungen
maxi :: (Int, Int) -> Int
maxi (x, y) | x >= y
= x
| otherwise = y
var
type
::
,
decl
var
pat
|
exp
=
exp
=
exp
III.2 Deklarationen - 5 -
Currying
plus :: (Int, Int) -> Int
plus (x, y) = x + y
Currying
plus :: Int -> Int -> Int
plus x y = x + y
var
type
::
,
decl
var
pat
|
exp
=
exp
=
exp
III.2 Deklarationen - 6 -
Pattern Matching
und :: Bool -> Bool -> Bool
und True y = y
und False
y = False
x
var
type
::
,
decl
var
pat
|
exp
=
exp
=
exp
III.2 Deklarationen - 7 -
Pattern Matching
und :: Bool -> Bool -> Bool
und True y = y
und
y = False
x
len :: [Int] -> Int
len []
= 0
len (x : xs) = 1 + len xs
fac :: Int -> Int
fac 0
= 1
fac (x + 1) = (x+1) * fac x
half
half
half
half
:: Int -> Int
0
= 0
1
= 0
(x + 2) = 1 + half x
Bool = "True" | "False"
Liste = "[]" |
Element ":" Liste
Int =
NInt | PInt
PInt = "0" | PInt "+ 1"
III.2 Deklarationen - 8 -
Lokale Deklarationen
roots :: Float -> Float -> Float -> (Float, Float)
roots a b c = ((-b - d)/e, (-b + d)/e)
where
where {d d= =sqrt
sqrt(b*b
b*b -- 4*a*c);
4*a*c
e e= =2*a}
2*a
locdecls
{
var
decl
::
,
;
type
}
decl
var
pat
|
exp
=
exp
=
exp
where
locdecls
III.2 Deklarationen - 9 -
Herunterladen