๐ Functional Programming Conference LiftIO 2021
๐ ์ฐ์๋ ์ฐ์ฐ์ผ๋ก ๊พธ๋ ค์ง ๊ฐ๋ฐํ์ ํจ์ํ Scala ํ์ฉ๊ธฐโ
Github Repoโ
package purecoincidence
object HigherLevel extends App {
def factA(n: Int): Int = {
var r = 1
for {
i <- 1 to n
} r *= i
r
}
def factB(n: Int): Int =
if (n <= 1) 1
else n * factB(n - 1)
def factC(n: Int): Int =
(1 to n).product
println((
factA(5),
factB(5),
factC(5)
)) // => (120,120,120)
}
FP ํน์งโ
- ๊ธฐ๊ณ ์ค์ฌ ๊ด์ ๊ณผ ์ฌ๋ ์ค์ฌ ๊ด์ ์ ์ฐจ์ด
- ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจ์๋ฅผ ํฉ์ฑํด ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ฝ๋ค.
- ์ํ๋ ๋ถ์ํจ๊ณผ์์ด ์์ ํจ์์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ๋ง์ ๋ค๋ฃฌ๋ค๋ฉด, ๊ทธ๋งํผ ์ถ๋ก ์ด๋ ํ ์คํธ๊ฐ ์ฝ๋ค.
- ์๊ฐ๊ณผ ์ํ๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
- ๋ฉํฐ์ค๋ ๋ ์ฒ๋ฆฌ๊ฐ ํจ์ฌ ์ฌ์์ง๋ค.
๊ณ ์ฐจํจ์โ
- ์ด๋ค ํจ์๊ฐ, ๋ค๋ฅธ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋, ํธ์ถ ๊ฒฐ๊ณผ๋ก ๋ณดํต์ ๊ฐ์ด ์๋ ํจ์๋ฅผ ๋ฐํํ๊ฑฐ๋, ๋๋, ๊ทธ ๋ ๋ค๋ฅผ ํ๋ค.
- ํจ์๋ฅผ ํ๋ฒํ ๊ฐ์ผ๋ก ์ทจ๊ธํ ์ ์์ด์ผ ๊ฐ๋ฅ.
package purecoincidence
object HigherOrderFunction {
def multiple(n: Int): Int => Int =
x => x * n
def pow(r: Int): Int => Int =
x => List.fill(r)(x).product
val triple: Int => Int = multiple(3)
val square: Int => Int = pow(2)
def main(args: Array[String]) =
println((
List(1, 2, 3, 4).map(triple compose square),
List(1, 2, 3, 4).map(square).map(triple)
)) // => List(3, 12, 27, 48), ...
}