λ is coming to Obj-C:
ReactiveCocoa
Vladimir @chippcheg Burdukov
Slide 2
Slide 2 text
Imperative
Slide 3
Slide 3 text
Declarative
Slide 4
Slide 4 text
Functional programming
λ-calculus
Slide 5
Slide 5 text
Functional programming
Slide 6
Slide 6 text
Pure function
• result doesn’t depend on any state
• function doesn’t change any
external state.
Slide 7
Slide 7 text
Pure function
def sqr(x: Int): Int = x * x //> sqr: (x: Int)Int
sqr(2) /> res4: Int = 4
def add1(x: Int): Int = x + 1 //> add1: (x: Int)Int
add1(4) //> res3: Int = 5
add1(add1(4)) //> res4: Int = 6
Slide 8
Slide 8 text
Higher-order functions
Slide 9
Slide 9 text
Higher-order functions
def sqr(x: Int): Int = x * x
def sumF(x: Int, y: Int, f: Int => Int) = f(x) + f(y)
sumF(3, 4, sqr) //> res5: Int = 25
Slide 10
Slide 10 text
Higher-order functions
def sqr(x: Int): Int = x * x
def sumF(x: Int, y: Int, f: Int => Int) = f(x) + f(y)
sumF(3, 4, sqr) //> res5: Int = 25
sumF(-9, 16, abs) //> res6: Int = 25
Slide 11
Slide 11 text
Tail recursion
Slide 12
Slide 12 text
Tail recursion
Lists
Head
Tail
Slide 13
Slide 13 text
Tail recursion
Lists
val foo: List[Int] = 1 to 5 toList
//> foo : List[Int] = List(1, 2, 3, 4, 5)
val foohead = foo.head
//> foohead : Int = 1
val footail = foo.tail
//> footail : List[Int] = List(2, 3, 4, 5)
Slide 14
Slide 14 text
Tail recursion
def sumList(xs: List[Int]): Int =
if (xs == Nil)
return 0
else
return xs.head + sumList(xs.tail)
// > sumList: (xs: List[Int])Int
!
sumList(foo) //> res3: Int = 15