haskell2.hs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. module Haskell2 where
  2. import qualified Data.Map as M
  3. import Control.Monad
  4. --implement player evaluatore (goals/matches)
  5. playerEvaluator :: (RealFloat a) => a -> a -> String
  6. playerEvaluator 0 _ = "Your moment will come kid"
  7. playerEvaluator matches goals
  8. | performance <= 0.5 = "You should have your feet checked by a god doctor"
  9. | performance <= 1 = "Not bad kid!"
  10. | performance > 1 = "Great Result kid!!!"
  11. where performance = goals / matches
  12. -- implement the quicksot algorithm
  13. quicksort :: (Ord a) => [a] -> [a]
  14. quicksort [] = []
  15. quicksort (x:xs) =
  16. let smallerSorted = quicksort [a | a <- xs, a <= x]
  17. biggerSorted = quicksort [a | a <- xs, a > x]
  18. in smallerSorted ++ [x] ++ biggerSorted
  19. -- implement a binary tree
  20. data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)
  21. -- define a singleton tree (one node with 2 empty leaf)
  22. singleton :: a -> Tree a
  23. singleton x = Node x EmptyTree EmptyTree
  24. -- define insertTree (remember that is a ordered insert)
  25. insertTree :: (Ord a) => a -> Tree a -> Tree a
  26. insertTree x EmptyTree = singleton x
  27. insertTree x (Node a left right)
  28. | x == a = Node x left right
  29. | x < a = Node a (insertTree x left) right
  30. | x > a = Node a left (insertTree x right)
  31. --define a function to check if a element is present in a Tree
  32. treeElem :: (Ord a) => a -> Tree a -> Bool
  33. treeElem _ EmptyTree = False
  34. treeElem x (Node a left right)
  35. | x == a = True
  36. | x < a = treeElem x left
  37. | x > a = treeElem x right
  38. --define treeSum
  39. treeSum :: (Num a) => Tree a -> a
  40. treeSum EmptyTree = 0
  41. treeSum (Node a left right) = (treeSum left) + a + (treeSum right)
  42. -- define treeValues, a function that returns a list containing all the values of a tree
  43. treeValues :: Tree a -> [a]
  44. treeValues EmptyTree = []
  45. treeValues (Node a left right) = treeValues left ++ [a] ++ treeValues right
  46. treeValues2 :: Tree a -> [a]
  47. treeValues2 EmptyTree = []
  48. treeValues2 (Node a left right) = a : ((treeValues left) ++ (treeValues right))
  49. -- define the map function for a tree
  50. treeMap :: (a -> b) -> Tree a -> Tree b
  51. treeMap _ EmptyTree = EmptyTree
  52. treeMap f (Node a left right) = Node (f a) (treeMap f left) (treeMap f right)
  53. -- defin the foldl function for a tree
  54. treeFoldl :: (a -> b -> a) -> a -> Tree b -> a
  55. treeFoldl _ z EmptyTree = z
  56. treeFoldl f z (Node a left right) = treeFoldl f (f (treeFoldl f z left) a) right
  57. -- define the foldr function on a tree
  58. treeFoldr :: (b -> a -> a) -> a -> Tree b -> a
  59. treeFoldr _ z EmptyTree = z
  60. treeFoldr f z (Node a left right) = treeFoldr f (f a (treeFoldr f z right)) left
  61. -- define a filter function on the tree
  62. treeFilter :: (a -> Bool) -> Tree a -> [a]
  63. treeFilter f = treeFoldr (\x acc -> if f x then x:acc else acc) []
  64. -- define the sumTree using treeFoldr
  65. treeSum2 :: (Num a) => Tree a -> a
  66. treeSum2 = treeFoldr (+) 0
  67. --define a the treeValues function on a tree using the treeFoldr
  68. treeValues3 :: Tree a -> [a]
  69. treeValues3 = treeFoldr (:) []
  70. --define the treeValues unction using the treeFoldl function
  71. treeValues4 :: Tree a -> [a]
  72. treeValues4 t = treeFoldl (++) [] (treeMap (:[]) t)
  73. --define a TrafficLight datatype implementing the equality operations and introducing a (partial) order
  74. data TrafficLight = Red | Yellow | Green
  75. instance Eq TrafficLight where
  76. Red == Red = True
  77. Yellow == Yellow = True
  78. Green == Green = True
  79. _ == _ = False
  80. instance Show TrafficLight where
  81. show Red = "The light is red"
  82. show Yellow = "The light is yellow"
  83. show Green = "The light is green"