Advertisement
Guest User

Untitled

a guest
Apr 20th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. import Data.List
  2.  
  3.  
  4. --Type synoniemen voor datatype Boek.
  5.  
  6. type Titel = String
  7. type Auteur = String
  8. type Prijs = Int
  9.  
  10.  
  11. --Een boek met een titel, een auteur en een prijs.
  12.  
  13. data Boek = Boek Titel Auteur Prijs deriving (Show, Eq)
  14.  
  15.  
  16. --Accessor functies voor datatype Boek.
  17.  
  18. titel (Boek t _ _) = t
  19. auteur (Boek _ a _) = a
  20. prijs (Boek _ _ p) = p
  21.  
  22.  
  23. --Instance declaratie voor datatype Boek om alleen op titel te sorteren.
  24.  
  25. instance Ord Boek where
  26. compare a b = compare (titel a) (titel b)
  27.  
  28.  
  29. --Datatypes Box en Zak.
  30.  
  31. data Box a = Leeg | Box a deriving (Show)
  32. data Zak a = LeegZak | Zak a deriving (Show)
  33.  
  34.  
  35. --Instance declaraties voor datatypes Box en Zak.
  36.  
  37. instance Functor Box where
  38. fmap f Leeg = Leeg
  39. fmap f (Box a) = Box (f a)
  40.  
  41. instance Functor Zak where
  42. fmap f LeegZak = LeegZak
  43. fmap f (Zak a) = Zak (f a)
  44.  
  45.  
  46. --Accessor functies voor datatypes Box en Zak.
  47.  
  48. boekUitBox (Box a) = a
  49. boekUitZak (Zak a) = a
  50. objectUitBox (Box a) = a
  51.  
  52.  
  53. --Functies om boeken in een Box en uit een Box te halen.
  54.  
  55. boekenInBox :: [Boek] -> Box [Boek]
  56. boekenInBox a = Box a
  57. boekenUitBox :: Box [Boek] -> [Boek]
  58. boekenUitBox a = boekUitBox a
  59.  
  60.  
  61. --Oneliners om een object in een zak te stoppen en een Object in een box te stoppen.
  62.  
  63. objectInZak a = Zak (a)
  64. objectInBox a = Box (a)
  65.  
  66.  
  67. --Maakt van een lijst met boeken een lijst van boeken in zakken in boxen.
  68.  
  69. boekenlijstInZakInBox [] = []
  70. boekenlijstInZakInBox (a:b) = objectInBox (objectInZak a) : boekenlijstInZakInBox b
  71.  
  72.  
  73. --Maakt van een lijst met getallen een lijst van getallen in zakken in boxen.
  74.  
  75. getallenlijstInBox [] = []
  76. getallenlijstInBox (a:b) = objectInBox a : getallenlijstInBox b
  77.  
  78.  
  79. --Datatype List
  80.  
  81. data List a = Empty | Head a (List a) deriving (Show, Read, Eq)
  82.  
  83. pushList :: List a -> [a] -> List a
  84. pushList Empty list = foldr Head Empty list
  85. pushList (Head h rest) list = foldr Head (Head h rest) list
  86.  
  87. changeContainer :: Box a -> Zak a
  88. changeContainer (Box a) = Zak a
  89.  
  90. instance Functor List where
  91. fmap f Empty = Empty
  92. fmap f (Head x n) = Head (f x) (fmap f n)
  93.  
  94.  
  95. --Datatype Tree
  96.  
  97. data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)
  98.  
  99. singleton :: a -> Tree a
  100. singleton x = Node x EmptyTree EmptyTree
  101.  
  102. treeInsert :: (Ord a) => a -> Tree a -> Tree a
  103. treeInsert x EmptyTree = singleton x
  104. treeInsert x (Node a left right)
  105. | x == a = Node x left right
  106. | x < a = Node a (treeInsert x left) right
  107. | x > a = Node a left (treeInsert x right)
  108.  
  109. instance Functor Tree where
  110. fmap f EmptyTree = EmptyTree
  111. fmap f (Node x l r) = Node (f x) (fmap f l) (fmap f r)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement