ios개발/함수형 프로그래밍

<프로그래밍 언어> 함수형 프로그래밍 - 0편, es6로 하는 fp

studying develop 2020. 4. 13. 17:27

[https://www.youtube.com/watch?v=4sO0aWTd3yc] 네이버 디투 강의다

 

책도 여기서 추천했다. 

프로그램 디자인 어떻게 할것인가.[https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=11329212]

컴퓨터 프로그램의 구조와 해석. [http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.prdNo=249235302&gclid=Cj0KCQjwm9D0BRCMARIsAIfvfIamtTBghBnTsjsypgKK9uH0TZ41Ewpcw97ARq8st8swOoAl_ZWa2ngaAq3cEALw_wcB]

그렇게 안보이지만 둘다 함수형 프로그래밍 언어 책이라 한다.

 


 

필터는 반복문 내부의 연산을 처리해준다. f를 통해 다형성을 만족한다.

맵은 반복문 내부의 조건문 역할이다. 마찬가지로 f를 통해 다형성을 만족한다.!

 

반복문 내부의 i는 명명형으로 기술되어 있다. 선언형으로 해보자.

 

 

함수형 프로그래밍은 자꾸 리턴하는게 좋다함. if를 대신해서 take를 사용할거다.

함수형 프로그래밍은 최대한 인자와 리턴으로 말을 한다. 리턴을 통해 더욱 수학적으로 된다. 

15:17

하나의 표현식으로 바뀐건데, 결국  그 말은 아래처럼 간결하게 표현할 수 있다는 말

 

 

 

함수형 언어는 코드를 값으로 다루는 메타 프로그래밍의 성질을 갖고 있다.

리스트 같은 것만 값이 아니라, 함수도 값임 그래서 리스트만 축약 가능한게 아니라 함수도 축약 가능하다.'''

go를 통해 절차형 프로그래밍 언어처럼 ㅇ좌에서 우로 읽게 고칠 수 있다. 근데 go가 잘 이해 안된다 ;; ....as 이게 뭐지?

그리고 go는 함수를 리스트로 취급하게 해주는거 같다.

 

 

 

그리고 커리는, 여러 항이 들어오면 연산하고, 한개 항만 들어오면 다음 연산으로 넘길 수 있다함

 

그리고 코드는 지연적으로 평가가 된다.

이 코드가 내부적으로 어떻게 작동하는지 이해해야 한다. 조건에 안맞으면 다음 단계 안한다는 설명이였는데, 즉 원래 반복문이랑 동일하게 작동한다 했다. 이 부분을 지연평가라 함. 필터와 맵이 지연적으로 동작한다.

 

지연 평가로 인해 무한에 대한 뭔가 가능하다는데, 무한개 넣고 200개만 꺼내는게 가능하다함;; 잘 이해 안됨


이제 이차원 배열 설명한다 함. 34:19

 

이차원 배열은 이제 이전에는 i,j ++로 했는데, 이게 프로그래밍이 어려워진다함;

함수형 프로그래밍은 이게 없다함.

 

이차원 배열은 뭐하는지랑  순회하는 로직을 분리시킨다. 순회하는 함수는 위임하는 셈

이차원 배열의 순회방식만 결정한다.

예시 코드가 그래서 

go(arr, flat, filter(a=> a%2)) 이런식으로 flat 방식으로 순회하고 filter 기능을 넣어라는 식으로 작성되있음.

 

음 그니까 순회랑 기능이랑 분리할수 있다는건 확실히 매력적인듯. 그리고 데이터 부분도 쉽게 변형이 가능하니까, 그 부분도 모듈화가 가능하네.

 


45:31 1부 끝, 2부시작

2부 : 함수형 프로그래밍의 모나드 ,프로미스 기반의 동시성 프로그래밍시에 실제 세계에서의 문제.

 

함수형 프로그래밍에서 모나드를 중시하는 언어가 있고, 아닌 언어도 있다함. lisp은 모나드가 없음. 메서드가 없어서 그럼. 모나드는 메소드를 가진 값ㅇ??이라함.  모나드를 자꾸 용어로 설명해서 설명이 어렵다함. 농담도 하심 어쨌든 모나드는 이해하기 힘들다는 건데.

 

모나드의 명세보다, 개발자가 얻을수 있는 가치가 중요하다 함. 모나드를 통해 어떤 가치를 얻으려 하는것인가. (근데 나도 함수형 프로그래밍의 가치를 보니까 잘 이해되는듯). 

 

f(g(x)) = f(g(x))는 수학에서는 항상 성립하지만, 현실에서는 이상한 값으로 안될수도 있다. 즉 모나드는 안전한 함수 합성을 위해서 존재한다. 즉 f(g(x))에서 x가 이상하면 어떤 목적을 갖고 알맞게 처리해주게 된다함.

 

프로미스는 퓨처 모나드라함; ㅋㅋ 모나드

 

klesli composition은 

f(g(x)) = g(x) 를 예로하면 g(x)가 잘못되면 f를 난 실행 안하고 g를 실행할래!가 되어 둘을 =로 연결이 가능하다.

 

모나드는 값이라는게 중요하다. setTimeout같은 콜백 함수로 비동기로 처리하는건 컨텍스트로, 그냥 흘러가는 놈이라 함수를 전달할수만 있지, 값을 잡을수는 없다함. 모나드는 이런 비동기 상황이 일어날텐데, 그럼 너는 이 박스안에 것을 하거라 이런 느낌임.

 

프로미스를 만들어 일급 함수로 사용할때, 진짜 의미가 나온다함. 일급이라는게 first-order func 이거 말하는듯.

 

일단 1:02:31까지봄, 자바스크립트 문법을 모르겠어서 잘 이해가 안된다.

 

이후는 못보겠다. js 몰라서 머리아픔.