smashedlife
5/17/2015 - 10:44 PM

# Programming Elixir Exercises

## Chapter 2 - Pattern Matching

### Exercise: Pattern Matching 2

Which of the following will match

``````[ a, b, a ] = [ 1, 2, 3 ]
# (MatchError) no match of right hand side value: [ 1, 2, 3 ]

[ a, b, a ] = [ 1, 1, 2 ]
# (MatchError) no match of right hand side value: [ 1, 1, 2 ]

[ a, b, a ] = [ 1, 2, 3 ]
# [ 1, 2, 1 ]
``````

### Exercise: Pattern Matching 3

If you assume the variable a initially contains the value 2, which of the following will match?

``````[ a, b, a ] = [ 1, 2, 3 ]
# (MatchError) No match of right hand side value: [ 1, 2, 3 ]

[ a, b, a ] = [ 1, 1, 2 ]
# (MatchError) No match of right hand side value: [ 1, 1, 2 ]

a = 1
# 1

^a = 2
# (MatchError) No match of right hand side value: 2

^a = 1
# 1

^a = 2 - a
# 1
``````

## Chapter 3 - Immutability

NOTES

• All values are immutable.
• Once a variable references a value, it will always reference those same values until you rebind the variable
• If you need to add an element to say, an array, Elixir will make a copy of original containing the new value. The original will remain unchanged.
• Since Elixir knows that existing data is immutable, it can reuse it, in part or as a whole, when building new structures
``````list1 = [ 3, 2, 1 ]
# [ 3, 2, 1 ]

list2 = [ 4 | list1 ]
# [ 4, 3, 2, 1]
``````
• Elixir allows you to write your code using lots of processes and each process has its own heap. Since each process is much smaller, garbage collection is much faster. If a process terminates before its heap becomes full, all its data is discaded. No garbage collection is required in this instance.
• Any function that transform data will return a new copy of it. It will never modify it in place.
``````name = "elixir"
"elixir"

cap_name = String.capitalize name
"Elixir"

name
"elixir"
``````

## Chapter 4 - Elixir Basics

NOTES

Built-in Types:

• Value types:
• Arbitrary-sized integers
• Floating-point numbers
• Atoms
• Ranges
• Regular expressions
• System types:
• PIDs and ports
• References
• Collection types:
• Tuples
• Lists
• Maps
• Binaries

Integers

• Integer literals can be written as decimals (1234), hexadecimals (0xcafe), octal (0o785) and binary (0b1010)
• Floa