Haskell Study Note Lesson 5

List

Creating Lists

Note : type homogeneous

  • [1,2,3]
  • [1..5][2,4..10]

Accessing List Elements

  • index from 0
  • !!list !! index

A safe way :

1
safeIndex xs i = if i < lenght xs then Just(xs !! i) else Nothing

Concatenation & Extension

  • Concatenation : ++ like [1, 2, 3] ++ [4, 5, 6]
  • Cons operator: : like 0 : [1, 2, 3] and we get [0, 1, 2, 3]

List Slicing

  • take : take 3 [1, 2, 3, 4, 5] is [1, 2, 3]
  • drop : drop 2 [1, 2, 3, 4, 5] is [3, 4, 5]
  • splitAt: splitAt 2 [1, 2, 3, 4, 5] is [1, 2], [3, 4, 5], which returns a tuple

A trick :

1
2
3
let xs = [1..10]
take 3 (drop 2 xs)
--- final : [3, 4, 5]

Basic Traversal

  • map

    1
    2
    map (*2) [1, 2, 3, 4]
    -- get [2, 4, 6, 8]
  • fliter

    1
    2
    filter even [1, 2, 3, 4, 5, 5]
    -- get [2, 4, 6]
  • head / tail

    1
    2
    3
    4
    head [1, 2, 3]
    -- 1
    tail [1, 2, 3]
    -- [2, 3]

Practice : Number List Tool

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
numbers :: [Int]
numbers = [3, 4, 5, 6, 7, 8]

printNumbers :: [Int] -> [Int]
printNumbers numbers = numbers

sumNumbers :: [Int] -> Int
sumNumbers numbers = sum numbers

maxNumbers :: [Int] -> Int
maxNumbers numbers = maximum numbers

filterNumbers :: [Int] -> [Int]
filterNumbers numbers = filter even numbers

mulNumbers :: [Int] -> Int -> [Int]
mulNumbers numbers ml = map (*ml) numbers

main :: IO ()
main = do
print (printNumbers numbers)
print (mulNumbers numbers 2)
print (sumNumbers numbers)
print (maxNumbers numbers)
print (filterNumbers numbers)