Nit: Anweisungen, die nacheinander ausgeührt werden. Nit: 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 ♡ Statises Typsystem mit Typersließung ♡ rein funktional • nebenläufig • lazy • 7000+ Pakete Ingo Blechschmidt <[email protected]> Tübinger Linuxtag