haskell chapter 1, part ii. list comprehension list comprehensions are a way to filter, transform...

8
Haskell Chapter 1, Part II

Upload: teresa-pope

Post on 28-Dec-2015

229 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

Haskell

Chapter 1, Part II

Page 2: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

List Comprehension List comprehensions are a way to filter,

transform and combine lists Similar to mathematical set comprehensions

{2 * x | x e N, X <= 10} In Haskell:

[x * 2 | x <- [1..10]] “draw” our elements from the list [1..10] so x takes on each value from 1 to 10 part before the pipe (|) is the output

Page 3: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

With a predicate [x * 2 | x <- [50..100], x `mod` 7 == 3]

Using a predicate in this way is called filtering

Can separate predicates with a comma [x | x <- [10..20], x /= 13, x /= 15, x /= 19]

Can draw from several lists [x+y| x<-[1,2,3], y <- [10,100, 1000]] result: [11,101,1001,12,102,1002,13,103,1003]

Page 4: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

More list comprehensions Can use a temporary variable

length' xs = sum [1 | _ <- xs]

Can be used with strings (they’re lists too) removeNonUppercase st = [c | c <- st, c `elem`

['A'..'Z']]

Nested list comprehensions -- let xxs = [[1,3,5,2,3,1,2,4,5],[1,2,3,4,5,6,7,8,9],

[1,2,4,2,1,6,3,1,3,2,3,6]] removeOdd xxs = [[x | x <- xs, even x] | xs <-

xxs]

Function definitions – must load, not just interpret. Use let to bind.

Page 5: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

Tuples Used to store several heterogeneous elements

as a single value Tuples have a fixed size Elements surrounded by parentheses

(1,3) (3, ‘a’, “hello”) (50, 50.4, “hello”, ‘b’)

tuple of size 2 is a different type from tuple of size 3

tuples with different member elements are different types

Page 6: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

More tuples Storing pairs is common in Haskell Useful functions to manipulate:

fst snd zip [1,2,3] [4,5,6] => [(1,4),(2,5),(3,6)] zip [1..] ["apple", "orange", "banana"] =>

[(1,"apple"),(2,"orange"),(3,"banana")]

Page 7: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

Tuples in list comprehensions Generate tuples

triples = [(a,b,c) | c <- [1..10], a<-[1..10], b<-[1..10]]

Generate tuples with filter rightTriangle = [(a,b,c) | c <- [1..10], a<-

[1..c], b<-[1..a], a^2 + b^2 == c^2]

Page 8: Haskell Chapter 1, Part II. List Comprehension  List comprehensions are a way to filter, transform and combine lists  Similar to mathematical set comprehensions

Play and Share evenCubes [1..20]

[8,64,216,512,1000,1728,2744,4096,5832,8000] onlyBig [200,30,50,20,120] 100

[200,120] noDiagonal [1..4]

[(1,2),(1,3),(1,4),(2,1),(2,3),(2,4),(3,1),(3,2),(3,4),(4,1),(4,2),(4,3)] diagonal 10

[(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10)] countOdd [1..30]

15 evenOddPairs [1..4][20, 17, 23, 42]

[(2,17),(4,17),(2,23),(4,23)] removeDigits "abc1d23A.98"

"abcdA.“ ends [[4,5,6],[1,2],[7,1,0]]

[6,2,0]

* These are parameters