|
@@ -0,0 +1,79 @@
|
|
|
+module Haskell2 where
|
|
|
+
|
|
|
+import qualified Data.Map as M
|
|
|
+import Control.Monad
|
|
|
+
|
|
|
+
|
|
|
+--implement player evaluatore (goals/matches)
|
|
|
+
|
|
|
+playerEvaluator :: (RealFloat a) => a -> a -> String
|
|
|
+playerEvaluator 0 _ = "Your moment will come kid"
|
|
|
+playerEvaluator matches goals
|
|
|
+ | performance <= 0.5 = "You should have your feet checked by a god doctor"
|
|
|
+ | performance <= 1 = "Not bad kid!"
|
|
|
+ | performance > 1 = "Great Result kid!!!"
|
|
|
+ where performance = goals / matches
|
|
|
+
|
|
|
+-- implement the quicksot algorithm
|
|
|
+
|
|
|
+quicksort :: (Ord a) => [a] -> [a]
|
|
|
+quicksort [] = []
|
|
|
+quicksort (x:xs) =
|
|
|
+ let smallerSorted = quicksort [a | a <- xs, a <= x]
|
|
|
+ biggerSorted = quicksort [a | a <- xs, a > x]
|
|
|
+ in smallerSorted ++ [x] ++ biggerSorted
|
|
|
+
|
|
|
+-- implement a binary tree
|
|
|
+
|
|
|
+data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)
|
|
|
+
|
|
|
+-- define a singleton tree (one node with 2 empty leaf)
|
|
|
+
|
|
|
+singleton :: a -> Tree a
|
|
|
+singleton x = Node x EmptyTree EmptyTree
|
|
|
+
|
|
|
+-- define insertTree (remember that is a ordered insert)
|
|
|
+
|
|
|
+insertTree :: (Ord a) => a -> Tree a -> Tree a
|
|
|
+insertTree x EmptyTree = singleton x
|
|
|
+insertTree x (Node a left right)
|
|
|
+ | x == a = Node x left right
|
|
|
+ | x < a = Node a (insertTree x left) right
|
|
|
+ | x > a = Node a left (insertTree x right)
|
|
|
+
|
|
|
+--define a function to check if a element is present in a Tree
|
|
|
+
|
|
|
+treeElem :: (Ord a) => a -> Tree a -> Bool
|
|
|
+treeElem _ EmptyTree = False
|
|
|
+treeElem x (Node a left right)
|
|
|
+ | x == a = True
|
|
|
+ | x < a = treeElem x left
|
|
|
+ | x > a = treeElem x right
|
|
|
+
|
|
|
+--define treeSum
|
|
|
+
|
|
|
+treeSum :: (Num a) => Tree a -> a
|
|
|
+treeSum EmptyTree = 0
|
|
|
+treeSum (Node a left right) = (treeSum left) + a + (treeSum right)
|
|
|
+
|
|
|
+-- define treeValues, a function that returns a list containing all the values of a tree
|
|
|
+
|
|
|
+treeValues :: Tree a -> [a]
|
|
|
+treeValues EmptyTree = []
|
|
|
+treeValues (Node a left right) = treeValues left ++ [a] ++ treeValues right
|
|
|
+
|
|
|
+
|
|
|
+treeValues2 :: Tree a -> [a]
|
|
|
+treeValues2 EmptyTree = []
|
|
|
+treeValues2 (Node a left right) = a : ((treeValues left) ++ (treeValues right))
|
|
|
+
|
|
|
+-- define the map function for a tree
|
|
|
+
|
|
|
+treeMap :: (a -> b) -> Tree a -> Tree b
|
|
|
+treeMap _ EmptyTree = EmptyTree
|
|
|
+treeMap f (Node a left right) = Node (f a) (treeMap f left) (treeMap f right)
|
|
|
+
|
|
|
+-- defin the foldl function for a tree
|
|
|
+treeFoldl :: (a -> b -> a) -> a -> Tree b -> a
|
|
|
+treeFoldl f z EmptyTree = z
|
|
|
+treeFoldl f z (Node a left right) = treeFoldl f (f (treeFoldl f z left) a) right
|