LISTS

advertisement
Haskell
Starting Out
Piotr Poniatowski
Łukasz Reszczyński Maciej Woźniczka
ARITHMETIC
Prelude>15+5
20
Prelude>18-6
12
Prelude>5/2
2.5
Prelude>2*2
4
Prelude>3^3
27
Prelude>sin 1
0.841470984807896
Prelude>pi
3.141592653589793
Prelude> (50 * 100) - 4999
1
Prelude> 50 * 100 - 4999
1
Prelude> 50 * (100 - 4999)
-244950
BOOLEAN ALGEBRA
Prelude> True && False
False
Prelude> 5 == 5
True
Prelude> True && True
True
Prelude> 1 == 0
False
Prelude> False || True
True
Prelude> 5 /= 5
False
Prelude> not False
True
Prelude> 5 /= 4
True
Prelude> not ( True && True )
False
Prelude> " hello " == " hello "
True
OPERATORS
(!!)
returns the item in the list at integer position
Input: [1,2,3] !! 0
Output: 1
Input: [6,5,4,3,2,1] !! 2
Output: 4
Input: "Hello" !! 1
Output: 'e'
OPERATORS
($)
right-associating infix application operator (f $ x = f x), useful in
continuation-passing style
Input: abs $ -12
Output: 12
OPERATORS
(%)
The operator (%) forms the ratio of two integral numbers, reducing
the fraction to terms with no common factor and such that the
denominator is positive.
Input: 12 % 4
Output: 3 % 1
Input: (-3) % 6
Output: -1 % 2
Input: 5 % 7
Output: 5 % 7
Input: 3 % (-6)
Output: -1 % 2
Input: 0 % 23
Output: 0 % 1
Input: (-3) % (-6)
Output: 1 % 2
OPERATORS
(**)
the power, returns the value of raising the first argument by the
second one
Input: 2 ** 16
Output: 65536.0
Input: 10**3
Output: 1000.0
OPERATORS
(++)
concatenates two lists
Input: [1,2,3]++[3,2]
Output: [1,2,3,3,2]
Input: "Hello"++", "++"world"++"!"
Output: "Hello, world!"
OPERATORS
(:)
inserts the first argument to a list passed as the second argument
Input: 1 : [3,4,5]
Output: [1,3,4,5]
Input: 'a':"efg "
Output: "aefg"
OPERATORS
(\\)
list difference (non-associative)
Input: [1,2,3,4] \\ [2,3]
Output: [1,4]
Input: [1,1,2,2] \\ [2,3]
Output: [1,1,2]
OPERATORS
(!), (!!), ($), ($!), (%)
(&&), (*), (**), (+), (++)
(-), (.), (/), (//), (/=)
(:), (:+), (<), (<=), (=<<)
(==), (>), (>=), (>>), (>>=)
(\\), (^), (^^), (||)
FUNCTIONS
abs - wartosc bezwzgledna
atan - arcus tanges
ceiling - calosc + 1
cos - cosinus
div - dzielenie calkowite
exp - exponent
floor - calosc
log - logarytm
max - maksimum
min - minimum
mod - operator reszty z dzielenia
pi - wartosc pi
round - zaokragla do najblizszej calkowitej
sin - sinus
sqrt - pierwiastek
tan - tanges
succ - operator ktory zwieksza argument o jeden
pred - operator ktory zmniejsza argument o jeden
FUNCTIONS
all - returns True if all items in the list fulfill the condition
Input: all (<10) [1,3,5,7,9]
Output: True
any - returns True if at least one item in the list fulfills the condition
Input: any (1==) [0,1,2,3,4,5]
Output: True
break - creates a tuple of two lists from the original one separated at
condition boundary
Input: break (3==) [1,2,3,4,5]
Output: ([1,2],[3,4,5])
FUNCTIONS
concat - accepts a list of lists and concatenates them
Input: concat [[1,2,3], [1,2,3]]
Output: [1,2,3,1,2,3]
delete - removes the first occurrence of the specified element from its list
argument
Input: delete 2 [1,2,3,2,1]
Output: [1,3,2,1]
divMod - the function returns a tuple containing the result of integral
division and modulo
Input: divMod 3 5
Output: (0,3)
FUNCTIONS
elemIndex - returns the index of the first occurrence, if any, of value in
list
enumFrom - returns an array of members of an enumeration starting with the
argument, it is equvalent to syntax.
Input: take 10 (enumFrom 'a')
Output: "abcdefghij"
many else...
OUR FUNCTIONS
In doubleMeFile.hs file write:
doubleMe x = x + x
Insde GHCI load your file:
Prelude> :l doubleMeFile
[1 of 1] Compiling Main ( doubleMeFile.hs , interpreted )
Ok , modules loaded : Main .
Prelude> doubleMe 9
18
Prelude> doubleMe 8.3
16.6
OUR FUNCTIONS
doubleSmallNumber x = if x > 100
then x
else x *2
LISTS
Note: We can use the
let keyword to define
a name right in GHCI
Prelude> let lostNumbers = [4 ,8 ,15 ,16 ,23 ,48]
Prelude> lostNumbers
[4 ,8 ,15 ,16 ,23, 48]
LISTS
Note: [], [[]] and [[],[],[]] are all different things.
The first one is an empty list,
the seconds one is a list that contains one empty list,
the third one is a list that contains three empty lists.
LISTS
basic functions that operate on lists
head takes a list and returns its head. The head of a list is
basically its first element.
Prelude> head [5 ,4 ,3 ,2, 1]
5
LISTS
basic functions that operate on lists
tail takes a list and returns its tail. In other words, it chops
off a list’s head.
Prelude> tail [5 ,4 ,3 ,2 ,1]
[4 ,3 ,2 ,1]
LISTS
basic functions that operate on lists
last takes a list and returns its last element.
Prelude> last [5 ,4 ,3 ,2 ,1]
1
LISTS
basic functions that operate on lists
length takes a list and returns its length, obviously
Prelude> length [5 ,4 ,3 ,2 ,1]
5
LISTS
basic functions that operate on lists
reverse reverses a list.
Prelude> reverse [5 ,4 ,3 ,2 ,1]
[1 ,2 ,3 ,4 , 5]
LISTS
basic functions that operate on lists
null, take, drop, maximum, minium, product, elem
RANGES
Prelude> [1..20]
[1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19, 20]
Prelude> [’a ’.. ’ z ’]
" abcdefghijklmnopqrstuvwxyz "
Prelude> [’K ’.. ’ Z ’]
" KLMNOPQRSTUVWXYZ "
Prelude> [2 ,4..20]
[2 ,4 ,6 ,8 ,10 ,12 ,14 ,16 ,18 ,20]
Prelude> [3 ,6..20]
[3 ,6 ,9 ,12 ,15 ,18]
SETS
A basic comprehension for a set that contains the first ten even
natural numbers is S = {2 · x|x ∈ N, x ≤ 10}. The part before the pipe is
called the output function, x is the variable, N is the input set and x <= 10 is the
predicate. That means that the set contains the doubles of all natural numbers
that satisfy the predicate.
Prelude> [x *2 | x <- [1..10]]
[2 ,4 ,6 ,8 ,10 ,12 ,14 ,16 ,18, 20]
Prelude> [x *2 | x <- [1..10] , x *2 >= 12]
[12 ,14 ,16 ,18 ,20]
SETS
Cool, it works. How about if we wanted all numbers from 50 to 100 whose
remainder when divided with the number 7 is 3?
SETS
Cool, it works. How about if we wanted all numbers from 50 to 100 whose
remainder when divided with the number 7 is 3?
Prelude> [ x | x <- [50..100], x ‘mod ‘ 7 == 3]
[52 ,59 ,66 ,73 ,80 ,87 ,94]
SETS
If we have two lists, [2,5,10] and [8,10,11] and we want to get the products of all
the possible combinations between numbers in those lists?
SETS
If we have two lists, [2,5,10] and [8,10,11] and we want to get the products of all
the possible combinations between numbers in those lists?
Prelude> [ x*y| x <- [2 ,5 ,10], y <- [8 ,10 ,11]]
[16 ,20 ,22 ,40 ,50 ,55 ,80 ,100 ,110]
Download