Scala kansai summit-2016
-
Upload
naoki-kitora -
Category
Software
-
view
773 -
download
0
Transcript of Scala kansai summit-2016
revival
Scala Summit 2016
•
Scala
Scala ?
?
• Scala
•
•
Scala ?
••
•
•
••
•
•
f(x) = x + 1 Scala
• = ( ) •
Which is
better?
def f(x: Int) {x + 1}
def f(x: Int) = x + 1
def f(x: Int) = return x + 1
※ : 2
( )
• (mutable)
•
•
2
?
int sum = 0;for (int i = 0; i < array.length; i++) { sum += array[i];}return sum;
i = i + 1;
?
https://goo.gl/iKyEKs
• 1 n
•
int f(int n) { int total = 0; for (int i = 1; i <= n; i++) { total += i; } return total;}
f(1) = 1 f(2) = 1 + 2 f(3) = 1 + 2 + 3 ... f(n) = 1 + 2 + 3 + ... + n
f(1) = 1 f(2) = f(1) + 2 f(3) = f(2) + 3 ... f(n) = f(n - 1) + n
f(1) = 1 f(n) = f(n - 1) + n
def f(n: Int): Int = if (n == 1) 1 else f(n - 1) + n
f(1) = 1 f(n) = f(n - 1) + n
f(0) = 1 f(1) = 1 f(2) = 2 * 1 f(3) = 3 * 2 * 1 ... f(n) = n * ... * 3 * 2 * 1
f(0) = 1 f(1) = 1 * f(0) f(2) = 2 * f(1) f(3) = 3 * f(2) ... f(n) = n * f(n - 1)
f(0) = 1
f(n) = n * f(n - 1)
def f(n: Int): Int = if (n == 0) 1 else n * f(n - 1)
n ?
1, 1, 2, 3, 5, 8, 13, …
f(0) = 1 f(1) = 1 f(2) = 1 + 1 f(3) = 1 + 2 f(4) = 2 + 3 f(5) = 3 + 5 ...
f(0) = 1 f(1) = 1 f(2) = f(0) + f(1) f(3) = f(1) + f(2) f(4) = f(2) + f(3) f(5) = f(3) + f(4) ... f(n) = f(n - 2) + f(n - 1)
f(0) = 1
f(1) = 1
f(n) = f(n - 2) + f(n - 1)
def f(n: Int): Int = if (n == 0) 1 else if (n == 1) 1 else f(n - 2) + f(n - 1)
sum
def sum(ints: List[Int]): Int
• Nil
• head tail head :: tail
3
Nil
Nil::3 :: Nil2 ::
2 :: 3 :: Nil1 ::
• •
5 :: 1 :: 2 :: 8 :: Nil
Nil
Nil::8
8 :: Nil::2
2 :: 8 :: Nil::1
1 :: 2 :: 8 :: Nil::5
sum(5 :: 1 :: 2 :: 8 :: Nil)
sum( ) = 0
sum( ) = 8 + 0
sum( ) = 2 + 8 + 0
sum( ) = 1 + 2 + 8 + 0
sum( ) = 5 + 1 + 2 + 8 + 0
Nil::8
Nil
8 :: Nil::2
2 :: 8 :: Nil::1
1 :: 2 :: 8 :: Nil::5
sum( ) = 0
sum( ) = + sum( )
sum( ) = + sum( )
sum( ) = + sum( )
sum( ) = + sum( )
Nil::8
Nil
8 :: Nil::2
2 :: 8 :: Nil::1
1 :: 2 :: 8 :: Nil::5
Nil8
8 :: Nil2
2 :: 8 :: Nil1
5 1 :: 2 :: 8 :: Nil
sum( ) = 0
sum( ) = + sum( )
sum( ) = + sum( )
sum( ) = + sum( )
Nil::8
Nil
8 :: Nil::2
2 :: 8 :: Nil::1
Nil8
8 :: Nil2
2 :: 8 :: Nil1
head
tail
head
tail
head
tail
head tail head :: tail
sum(Nil) = 0sum(head :: tail) = head + sum(tail)
def sum(list: List[Int]): Int = if (list.isEmpty) 0 else list.head + sum(list.tail)
def sum(list: List[Int]): Int = list match { case Nil => 0 case head :: tail => head + sum(tail)}
def sum(list: List[Int]): Int = list match { case Nil => 0 case head :: tail => head + sum(tail)}
def sum(list: List[Int]): Int = { def loop(acc: Int, l: List[Int]): Int = l match { case Nil => acc case head :: tail => loop(acc + head, tail) } loop(0, list)}
product
def product(ints: List[Int]): Int
max
def max(ints: List[Int]): Int
reverse
def reverse(ints: List[Int]): List[Int]
length
def length(ints: List[Int]): Int
• Functional Programming Principles in Scala Scala Martin Odersky
https://www.coursera.org/course/progfun
• OCaml
http://www.amazon.co.jp/dp/4781911609
• Scala & ―Scalaz
2
http://www.amazon.co.jp/dp/4844337769