Advertisement
schteeben

Weekend Haskell with Steven - Week 5

Mar 25th, 2017
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data List a = Empty | Entry a (List a)
  2. -- ^^^ Custom list.
  3.  
  4. -- elem, last, head, tail, length, map, filter, etc.
  5.  
  6. myList :: [Integer]
  7. myList = [1, 2, 3, 4, 5, 6, 7, 100, 300, 823]
  8.  
  9. myHead :: [Integer] -> Integer
  10. myHead list = case list of  
  11.     []    -> error "No head for empty lists"
  12.     x : _ -> x
  13.    
  14. myTail :: [Integer] -> [Integer]
  15. myTail list = case list of
  16.     []     -> error "No tail for empty lists"
  17.     _ : xs -> xs
  18.    
  19. myLast :: [Integer] -> Integer
  20. myLast list = case list of  
  21.     []     -> error "No last element for empty lists"
  22.     x : [] -> x
  23.     _ : xs -> myLast xs
  24.    
  25. myLength :: [Integer] -> Integer
  26. myLength list = case list of
  27.     []     -> 0
  28.     _ : xs -> 1 + myLength xs
  29.  
  30. myElem :: Integer -> [Integer] -> Bool
  31. myElem a list = case list of
  32.     []     -> False
  33.     x : xs
  34.         | x == a    -> True
  35.         | otherwise -> myElem a xs
  36.  
  37. addTwoToEverythingIn :: [Integer] -> [Integer]
  38. addTwoToEverythingIn list = case list of    
  39.     []     -> []
  40.     x : xs -> (x + 2) : addTwoToEverythingIn xs
  41.    
  42. doSomethingToEverythingIn :: (Integer -> Integer) -> [Integer] -> [Integer]
  43. doSomethingToEverythingIn f list = case list of
  44.     []     -> []
  45.     x : xs -> (f x) : doSomethingToEverythingIn f xs
  46.  
  47. getEvenNumbersOutOf :: [Integer] -> [Integer]
  48. getEvenNumbersOutOf list = case list of
  49.     []     -> []
  50.     x : xs
  51.         | even x    -> x : getEvenNumbersOutOf xs
  52.         | otherwise -> getEvenNumbersOutOf xs
  53.  
  54. myFilter :: (Integer -> Bool) -> [Integer] -> [Integer]
  55. myFilter f list = case list of
  56.     []     -> []
  57.     x : xs
  58.         | f x       -> x : myFilter f xs
  59.         | otherwise -> myFilter f xs
  60.  
  61. contains :: String -> String -> Bool
  62. contains s1 s2 = case s2 of
  63.     []     -> True
  64.     x : xs
  65.         | head s1 == x && elem x (tail s1) -> contains (truncateString x (tail s1)) xs
  66.         | head s1 == x -> contains (truncateString x s1) xs
  67.         | otherwise    -> False
  68.     where
  69.         truncateString :: Char -> String -> String
  70.         truncateString c string = case string of  
  71.             []     -> []
  72.             x : xs
  73.                 | x == c    -> xs
  74.                 | otherwise -> truncateString c xs
  75.  
  76. maybeFactorial :: Integer -> Maybe Integer
  77. maybeFactorial a
  78.     | a < 0 = Nothing
  79.     | otherwise = Just (doFactorial a)
  80.     where
  81.         doFactorial :: Integer -> Integer
  82.         doFactorial x
  83.             | x == 0 = 1
  84.             | otherwise = x * (doFactorial (x - 1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement