Guest User

Untitled

a guest
Apr 24th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.51 KB | None | 0 0
  1. import Data.List (partition)
  2.  
  3. average2 :: (Fractional a) => a -> a -> a
  4. average2 x y = (x + y) / 2
  5.  
  6. median :: Ord a => [a] -> Maybe a
  7. median xs
  8. | even n = Nothing
  9. | otherwise = select (n `div` 2) xs
  10. where
  11. n = length xs
  12.  
  13. select :: Ord a => Int -> [a] -> Maybe a
  14. select _ [] = Nothing
  15. select k (x:xs) = case compare k m of
  16. LT -> select k lt
  17. EQ -> Just x
  18. GT -> select (k - m - 1) gte
  19. where
  20. m = length lt
  21. (lt, gte) = partition (< x) xs
  22.  
  23. main :: IO ()
  24. main = do
  25. let v = [1,2,3,4,5]
  26. print $ median v
Add Comment
Please, Sign In to add comment