Эх сурвалжийг харах

other work on haskell, in particular trees, review the last

Andrea Gus 9 жил өмнө
parent
commit
b3ab969c1d
1 өөрчлөгдсөн 79 нэмэгдсэн , 0 устгасан
  1. 79 0
      haskell/haskell2.hs

+ 79 - 0
haskell/haskell2.hs

@@ -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