Published
Edited
Jun 24, 2020
Insert cell
md`
# 11번째는 함수형 프로그래밍
함수형아, 너무 어려운거 알아? 이건 숙련자들이 잘 할 것 같애요

---
`
Insert cell
md`
<h2>커리된 함수와 커리되지 않은 함수</h2>
`
Insert cell
// 아래는 커리되지 않은 함수이다.
addU = (x, y) => x + y
Insert cell
subU = (x, y) => x - y //뺄셈 수행 함수
Insert cell
// 두 변수의 순서를 바꾸어주는 고차함수
flipU = f => (a, b) => f(b,a) //여기까지는 이해에 문제가 없습니다! :)
Insert cell
//여기서 혼란이 오기 시잡합니댜..
g1 = flipU(subU)
Insert cell
g1(3,7) // 두 수의 순서가 바뀌면서 7-3을 수행합니다
Insert cell
//얘가 커리된 함수인데, 최종적으로 함수를 반환해주는 고차함수 입니다.
addC = x => y => x+y
Insert cell
subC = x => y => x-y
Insert cell
addC(2) // 2 => y => 2 + y가 되어 함수를 반환하게 됩니댜.
Insert cell
//이를 모두 실행하여 값을 출력하려면 다음과 같이 실행해줍니다.
addC(3)(7) // 3 => 7 => 3+7 = 10
Insert cell
flipC = f => a => b => f(b)(a) // 코드가 길어질수록 이해가 힘드러..
//f는 (a)받고 (b) 받아서 f(b)(a)가 된다. 아래 셀 내용이 관건!
Insert cell
g2 = flipC(subC) // 그러니까 이거는요; flipC(x=>y=>x-y)
//flipC(x-y) => z => (z)(x-y)인 것 같은데 말입니다,,?
// 아니다 flipC가 인자를 바꾸고 subC가 두개를 받아서 뺄셈을 한다.
Insert cell
g2(5)(7)
// 결론적으로 7에서 2를 뺀 결과가 나오는 것이긴 합디댜
Insert cell
// 커리된 함수와 커리되지 않은 함수는 상위호환이 되지 않기 때문에 변신이 필요하다!!
curry = f => a => b=> f(a, b)
Insert cell
subC2 = curry(subU)
Insert cell
g4 = flipC( curry(subU))
Insert cell
subC2(10)(3)
Insert cell
// 커리되지 않은 함수 만들기
uncurry = f => (a,b) => f(a)(b)
// 카레 먹은 지 정말 오래된 것 같은데
Insert cell
g5 = uncurry(g4) // 참고로 이걸 쓰고 있는 지금 난, 머리속이 스파게티(?)가 되고 있다는 사실
Insert cell
g5(3,7) // 결과는 제대로 출력되지만, 이해하기 너무... 복잡혀
// 이걸 머리속으로 구현할 수 있는 분들은 참으로 대단합니다.
Insert cell
md`---
# 이 파트는 넘어가는 걸로....<br> <br>도저히 이해하기에<br> <br>제 두뇌의 역량이 너무 부실하네요`
Insert cell
html`
교수님께서 강의 영상에서 하셨던 말씀 중에 <br>함수에서 === 연산자는 사용할 때 조심해야 한다는 것을<br> 명심합니다
`
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more