Haskell, eine rein funktionale Programmiersprache

Werbung
Nit: Anweisungen, die nacheinander ausgeührt werden.
Nit: Anweisungen, die nacheinander ausgeührt werden.
Besteht ein Programm die Typprüfung, so ist es korrekt.“
”
icksort in C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// von rosettacode.org
void quick_sort (int *a, int n) {
int i, j, p, t;
if (n < 2)
return;
p = a[n / 2];
for (i = 0, j = n - 1;; i++, j--) {
while (a[i] < p)
i++;
while (p < a[j])
j--;
if (i >= j)
break;
t = a[i];
a[i] = a[j];
a[j] = t;
}
quick_sort(a, i);
quick_sort(a + i, n - i);
}
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
6
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
1
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
1
2
3
4
5
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : ⁇
tail fibs = 1 : ⁇
+
2 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : ⁇
tail fibs = 1 : ⁇
+
2 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : ⁇
tail fibs = 1 : 2 : ⁇
+
2 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : ⁇
tail fibs = 1 : 2 : ⁇
+
2 : 3 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : 3 : ⁇
tail fibs = 1 : 2 : ⁇
+
2 : 3 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : 3 : ⁇
tail fibs = 1 : 2 : 3 : ⁇
+
2 : 3 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : 3 : ⁇
tail fibs = 1 : 2 : 3 : ⁇
+
2 : 3 : 5 :⁇
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
1
2
3
4
5
6
1
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : 1 : 2 : 3 : 5 : 8 : 13 : …
tail fibs = 1 : 2 : 3 : 5 : 8 : 13 : 21 : …
+
2 : 3 : 5 : 8 : 13 : 21 : 34 : …
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Haskell, eine rein funktionale Sprache
6
qsort []
= []
qsort (x:xs) =
qsort kleinere ++ [x] ++ qsort groessere
where
kleinere = [y | y <- xs, y <= x]
groessere = [y | y <- xs, y > x]
1
Die Fibonaccizahlen: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
1
2
3
4
5
♡ Statises Typsystem mit Typersließung ♡
rein funktional • nebenläufig • lazy • 7000+ Pakete
Ingo Blechschmidt <[email protected]>
Tübinger Linuxtag
Herunterladen