OOP 에서는 상속, 오버로딩, 객체 라는 굵직한 개념으로 설명이 된다면, 함수형은 람다 및 클로져, iteration으로 설명 할 수가 있음?
[%] 함수형 프로그래밍이란 도대체 뭘까
펭귄(106.246)
2019-01-04 13:13
추천 0
댓글 25
다른 게시글
-
C++ future는 폴링 안씀? [7][%] ㅇㄹ(rerereq) | 19.01.04추천 0
-
하스켈 자연수 succesor방식으로 정의되어있음? [8][질문] 익명(221.166) | 19.01.04추천 0
-
이펙티브 모던 책에 moumou가 얘기한 future 소멸자 얘기 나오네 [1][%] 익명(123.141) | 19.01.04추천 2
-
함수형 자바스크립트 영상보는중 [2][%] 로드투로드(datamining) | 19.01.04추천 0
-
유익한 글 퍼왔다 [9][정보] 로드투로드(datamining) | 19.01.04추천 2
-
고대 사이버국방 애들은 멀공부할까 [3][%] 에르씨(lchbest10) | 19.01.03추천 0
-
dependently typed라는게 뭔 말이냐 [1][%] 익명(110.70) | 19.01.03추천 0
-
내가 생각하는 high-level의 정도?는 이 플랏에 가까운 듯 [3][%] 웹땔감(webfirewood) | 19.01.03추천 0
-
std::async가 반환하는 퓨처의 동작이 직관이랑은 좀 다르네요 [8][정보] moumou(moumou) | 19.01.03추천 0
-
아 한글과컴퓨터 쓰레기같은 기업 진짜 뷰어하나 깔았다고 [4][%] 익명(121.174) | 19.01.03추천 3
값넣으면 값나오는게 전부아니겟읍니까
면접에서 그렇게 이야기하면 바로 너 탈락 이럴듯 ㅇㅅㅇ;;
유감이네요 회사 수준이 그것밖에 안되서
순수성 클로저 고차함수 이런거 아닌가
예전에 프갤에서 본건데 사이드 이펙트를 최소화하는 프로그래밍이라고 누가 그러던데 그런 프로그래밍을 강제하는 언어가 함수형 언어라고 하고
사이드 이펙트를 최소화한다는 건 시스템 콜을 최소화 한다는 의미하고 비슷해서 엄밀히 말하기엔 부족하지 않을까 싶음.
사이드 이펙트를 최소화하는게 왜 시스템 콜 최소화야;; - return 0;
https://ko.wikipedia.org/wiki/%EB%B6%80%EC%9E%91%EC%9A%A9_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)
> 컴퓨터 과학에서 함수가 결과값 이외에 다른 상태를 변경시킬 때 부작용이 있다고 말한다.
시스템 콜도 부수 효과로 볼 수 있다고 생각했음. 실제로 취급이 그렇고. 하스켈로 치면 IO 모나드임.
물론 저 말을 찰떡같이 알아듣자면 최대한 부수 효과를 제어 하에 두어서 최소화한다고도 이해가 가능하지만, 그렇게까지 부수효과를 격리하는 언어는 최소 하스켈까진 가야함.
부수 효과를 변경한다는 대목부터 결과 프로그램이 변경된다는 걸 의미한다고도 생각할 수 있어서 좋은 설명이 아니라고 생각.
내 느낌을 좀 더 말하자면, 이 설명은 함수형 언어에 대한 설명이라기보다 하스켈 설명에 가까운 듯.
아니 사이드 이펙트는 레퍼런스의 사용부터 전역변수의 사용까지 굉장히 광범위한데 시스템콜만 얘기하시면 문제 있는거임 - return 0;
ㅇㅇ 맞음. 부수 효과는 광범위하지. 나는 반례를 든 거임. 부수 효과의 하나인 시스템 콜을 최소화하는 코딩을 함수형 프로그래밍이라고 볼 수 있겠냐고. 마찬가지로 전역 변수하고 필드(하스켈로 치면 Reader나 State 모나드) 사용을 절제하는 코딩을 함수형 프로그래밍으로 볼 수 있겠냔 말이지. 혹시 부수 효과를 타입 시그니처로 명시해서 제어 하에 두는 걸 부수 효과의 최소화로 보는 거라면, 그건 위 댓글에서 설명했다시피 함수형 언어의 특징이라기보다 타입 시스템이 섬세한 언어의 특징이고, 그냥 하스켈 특징임.
효과없이 값으로 코드짜는거에 1급함수찌끄래기 넣은게 fp지 머 특별한게 있겠음
본질은 값넣으면 값나오는건데 그래서 이름도 함수인거고
프로그램 조립 기본 단위를 클래스로 보는 게 OOP라고 한다면 함수형은 수학의 함수를 단위로 보는 거라는 게 시작점. 수학의 함수는 순수하기에 예측이 쉬운 반면 프로그램이 반드시 다뤄야하는 부수 효과(=사이드 이펙트)를 다룰 수 없음. 다루는 방법 중에 하나로 모나드가 있는 거임. 함수형 언어의 다른 특징들은 전부 함수의 조립을 편리하게 하려는 목적을 가짐. 이상이 내 생각.
함수형의 정의 자체는 같은 값 넣을 때 같은 값 나오는 순수함수들을 많이 쓰는게 맞는데 ㅇㅅㅇ 조딩코무사님 말이 맞음 - return 0;
purity는 사실 옵션임. 이거는 lazy eval이랑 관계가 더 깊음. 애초에 컴퓨터라는것 자체가 IO투성이임. 이거 다루려면 strict eval이 더 유리한데, 무한대를 다룬다거나 기타등등의 이유로 lazy eval을 디폴트로 택한 언어는 프로그래머 입장에서 함수가 eval 되는 순서를 알기가 매우 까다로움. 그래서 도입한게 어떤 함수를 먼저 eval하는지 순서와 관계없이 같은 결과를 주는 순수성임. 실제로, 함수형 언어라도 strict eval 이 디폴트인 언어는 거의 다 impure고, lazy eval인 언어는 거의 다 pure
뭔소리임 오히려 evaluation 순서가 option 이고 purity 가 정의지. 먼저 eval 하는 순서와 관계없이 같은 결과를 준다는게 pureness 의 정의임 - return 0;
아니, 언어 디자인할때 lazy로 할건가 안할건가를 먼저 결정하고 lazy면 pure 언어로 간다는거. 이건 그냥 내생각이 아니라, 하스켈 언어 설계한 사람이 한 이야기임.
lazy로 갈때 pure로 간다는 것 자체는 이해가 가는데 그게 함수형언어에서 purity가 옵션이라는 얘기의 근거가 될지는 잘 모르겠는데
함수형 언어의 정의와 관련된 이야기라기보다는 구현할 때의 편의성과 관련된 이야기 아님?
편의성이라기보다는 실현가능성이라고 해야 맞나
뭐 함수형 언어의 정식 정의라는게 따로 있는지는 모르겠지만 일단 내가 생각하는 함수형 언어의 정의에 대해서는 좀 긴 불필요한 이론얘기로 빠질테니 노코멘트...난 그냥 impure 함수형이라고 좀 '덜된' 함수형 언어가 아니고, 똑같은 함수형 언어라는점에서 옵션이라고 한거.
암걸리고싶으면 레이지+임퓨어 하십샤
아아~ C++ 아시는구나 - return 0;
모나드