Haskell Mis on Haskell Haskell Brooks Curry Imperatiivsed
Haskell
Mis on Haskell? • Haskell Brooks Curry • Imperatiivsed keeled vs deklaratiivsed keeled • Funktsionaalsed keeled
Miks kasutada Haskell’i? • Oluliselt suurendab programmeerija tootlikkust • Lühem, selgem ja paremini hooldatavam kood • Vähem vigu, suurem usaldatavus
Haskell omadused • Puudub programmi oleku mõiste • Rikkad abstraktsioonivahendid • Võimas tüübisüsteem
Lühiajalugu • 1987 loodi Haskell’i komitee • 1988 esimene keelekirjeldus • 1999 Haskell 98 (Standard Haskell)
Haskell realisatsioonid • • hugs interpretaator, Portland, Yale ghc kompilaator, Glasgow nhc kompilaator, York hbc kompilaator, Chalmers
Hugs • hugs = Haskell Users Gofer System • http: //www. haskell. org/hugs – Win, Unix, linux, . . .
Hugs käivitamine hugs [options] [files] Näide: hugs programm. hs
Haskell struktuur • Programmi struktuur – Prelude. hs • Mooduli struktuur • Näide module Test (test) where test : : String test = “Testimine!"
Haskell programmeerimine • Tüüpide deklareerimine – nimi 1 , . . . , nimin : : Tüüp • Tüübi deklareerimine avaldises – 4 * (3 : : Int) • Funktsiooni defineerimine – nimi arg 1. . . argn = avaldis • Näide faktoriaal – faktoriaal n = if n==0 then 1 else n * faktoriaal(n -1)
Haskell programmeerimine • Funktsiooni defineerimisel võib kasutada mitut võrdust faktoriaal : : Int -> Int faktoriaal 0 = 1 faktoriaal n = n * faktoriaal(n-1) • “valvurite” kasutamine faktoriaal : : Int -> Int faktoriaal n | n == 0 = 1 | otherwise = n * faktoriaal (n-1)
Haskell eeldefineeritud tüübid
Haskell eeldefineeritud funktsioonid • • • negate, abs (+), (-), (*), (/) div, mod (&&), (||) not (==), (/=), (<=), (>=) is. Space, is. Digital is. Upper, is. Lower ord, chr. . .
Haskell operaatorid • Erisümbolitest koosnevad identifikaatorid on infiks-operaatorid: !#$%&*+. /<=>? @^|-~: • Prefiks-kujul operaatorid Näide: (*) 1 3
Listide eeldefineeritud funktsioonid • • • length head tail concat reverse. . .
Haskell paigutusreeglid x=y+z where y = 3 z=4 w=z*7 {x = y + z where {y = 3; z = 4}; w = z * 7}
Haskell näide qsort [] = [] qsort (x: xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x]
C näide qsort( a, lo, hi ) int a[], hi, lo; { int h, l, p, t; if (lo < hi) { l = lo; h = hi; p = a[hi]; do { while ((l < h) && (a[l] <= p)) l = l+1; while ((h > l) && (a[h] >= p)) h = h-1; if (l < h) { t = a[l]; a[l] = a[h]; a[h] = t; } } while (l < h); t = a[l]; a[l] = a[hi]; a[hi] = t; qsort( a, lo, l-1 ); qsort( a, l+1, hi ); } }
- Slides: 19