De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”

Verwante presentaties


Presentatie over: "Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”"— Transcript van de presentatie:

1 Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI” ”a12#” ’a’ ’A’ ’1’ ’@’ ’;’

2 Oneindige lijsten nOneindige lijst nLazy evaluation: oneindige lijst als tussenresultaat antwoord toch in eindige tijd repeat :: a  [a] repeat x= x : repeat x

3 5678 [5678, 567, 56, 5, 0, 0, [5678, 567, 56, 5] [8, 7, 6, 5] [5, 6, 7, 8] [’5’, ’6’, ’7’, ’8’] int2string = f5.f4.f3.f2.f1 where f1 = f2 = f3 = f4 = f5 = Functies combineren iterate (\x  x/10) takeWhile ((/=)0) map (\x  x-10*(x/10)) reverse map (\x  chr(x+48)) ”5678”

4 > groepeer 2 [[1,2,3,4,5,6,7], [3,4,5,6,7], [5,6,7], [7] ] [[1,2,3,4,5,6,7], [3,4,5,6,7], [5,6,7], [7], [], [], [], [] [1,2,3,4,5,6,7] [[1,2], [3,4], [5,6], [7]] groepeer n =. Zelftest iterate (drop n) takeWhile (not.null) map (take n) groepeer :: Int  [a]  [[a]]

5 Datastructuren nLijst variabel aantal hetzelfde type nTupel vast aantal verschillend type rij :: [Int] rij = [1, 2, 3, 4, 5] paar:: (Int, String) paar = (3, ”hoi”)

6 Type-definities nIntroduceert een nieuw type uin de prelude uin je eigen programma type String = [Char] type Punt = (Float,Float)

7 Functies met patronen nFuncties op lijsten nFuncties op tupels head:: [a]  a tail :: [a]  [a] head (x:xs) = x tail (x:xs) = xs fst:: (a, b)  a snd :: (a, b)  b fst (x, y) = x snd (x, y) = y

8 Lijst van tupels telefoonboek :: [ (String, Int) ] telefoonboek = [ (”Jeroen”, 4118), (”Bastiaan”, 2585), (”Jur”, 3283), (”Arjan”, 1012) ] zoek :: [ (String, Int) ]  String  Int > zoek telefoonboek ”Bastiaan” 2585

9 Zoek in lijst van tupels zoek :: [ (String, Int) ]  String  Int zoek [ ] iets = 0 zoek ( t : ts ) iets > zoek telefoonboek ”Bastiaan” 2585 | eqString iets naam = nr | otherwise = zoek ts iets (naam,nr)

10 Polymorf zoeken zoek :: [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x (a  a  Bool) 

11 Lijst-comprehensies nNotatie uit de verzamelingenleer { x*x | x  N, x<10 } > [ x*x | x  [1..10], even x ] [4, 16, 36, 64, 100] > [ (x,y) | x  [1,4,8], y  ”ab” ] [ (1,’a’), (1,’b’), (4,’a’), (4,’b’), (8,’a’), (8,’b’) ]

12 Lijst-comprehensies nSpeciale notatie nbetekent hetzelfde als maar leest lekkerder dan [ expressie | x  lijst, predicaat x ] map (\x  expressie ) (filter (\x  predicaat) lijst )

13 Datastructuren nLijst uleeg ukop en staart [ ] :: [a] (:):: a  [a]  [a]

14 Nieuwe Datastructuren nDing uleeg ukop en twee staarten Leeg:: Ding a Split:: a  Ding a  Ding a  Ding a

15 Zelf datastructuren ontwerpen data Boom a = Blad | Tak a (Boom a) (Boom a) constructor functies het nieuwe type types van de parameters van de constructorfuncties Blad:: Boom a Tak:: a  Boom a  Boom a  Boom a

16 Een datastructuur opschrijven nLijst nBoom [ ] 4 :3 :2 :1 : BladTak 2Blad Tak 4 Blad Blad Tak 7 ( ) ( ) Tak 5 (Tak 1 Blad Blad ) (Blad ) Tak 3 ( ) ( )

17 Functies op datastructuren nLijst nBoom length :: [a]  Int length [ ] = 0 length (x:xs) = 1 + length xs omvang :: Boom a  Int omvang Blad = 0 omvang (Tak x li re) = 1 + omvang li + omvang re constructor functies

18 Boomstructuur 4231529103161158182634 blad diepte 14

19 Functies op datastructuren nomvang ndiepte omvang :: Boom a  Int omvang Blad = 0 omvang (Tak x li re) = 1 + omvang li + omvang re diepte :: Boom a  Int diepte Blad = 0 diepte (Tak x li re) = 1 + max (diepte li) (diepte re)

20 Zoekboom 4 2315291031611581826 34 14 4 310 1161 58 23 1529 182634 3 4 10 16 58 11 6 10 11 58 links is kleiner rechts is groter

21 Zoekboom 4 2315291031611581826 34 14 18 ? zoek kleiner? linksaf! groter? rechtsaf!

22 Zoeken in een zoekboom zoek :: (a  a  Ord)  a  Boom a  Bool zoek cmp e Blad= zoek cmp e (Tak x li re)= False cmp e xf ( ) wheref EQ = f LT = f GT = True zoek cmp e li zoek cmp e re

23 Zoekboom 4 2315291031611581826 34 14 16 insert zoek maak nieuw hok 16

24 Insert in een zoekboom insert :: (a  a  Ord)  a  Boom a  Boom a insert cmp e Blad= insert cmp e (Tak x li re)= Tak e Blad Blad cmp e xf ( ) wheref LT = f _ = Tak x (insert cmp e li) re Tak x li (insert cmp e re)

25 Labels van een boom 34 423 1529103 1611 58 1826 14 16 > labels testboom [1,3,4,5,6,8,10,11,14,15,16,18,23,26,29,34]

26 Labels van een boom labels :: Boom a  [a] labels Blad= labels (Tak x li re)= [ ] [x] labels li ++ labels re treeSort :: (a  a  Ord)  [a]  [a] treeSort cmp = labels. foldr (insert cmp) Blad

27 Zelf datastructuren ontwerpen data Boom a = Blad | Tak a (Boom a) (Boom a) constructor functies het nieuwe type types van de parameters van de constructorfuncties

28 Opnieuw de lijst uitvinden data Lijst a = Nil | Cons a (Lijst a) constructor functies het nieuwe type types van de parameters van de constructorfuncties

29 Zelf datastructuren ontwerpen data MayBe a = No | Yes a constructorfuncties niet recursief het nieuwe type

30 Polymorf zoeken zoek :: (a  a  Bool)  [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x MayBe b No Yes b

31 Datastructuren nTupel(a,b) nLijst[a] nZelfgemaaktBoom a met constructorfuncties type String = [Char] data Boom a = Blad | Tak a (Boom a) (Boom a)


Download ppt "Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”"

Verwante presentaties


Ads door Google