기본 콘텐츠로 건너뛰기

프로시저와 순수함수

프로시저(procedure)  vs 순수함수(pure function)
c/c++로 시작한 입장에서 둘다 생소한 개념이다. 
프로시저는 c/c++에서의 함수와 동일 하지만 이름이 다르기 때문에 혼동이 되었다.
c/c++을 공부/개발 해본 사람이라면 우리가 
return_type function_name (argument)로 만들었던 함수 이다.
물론 c언어의 함수에서 순수함수를 구현할수 있다. 단지 c언어에서는 프로시저와 순수함수를 구분하지 않고 둘다 함수라는 큰 단위로 이해한다.
순수함수(pure function)은 수학의미하는 함수 이다. 정의역과 치역이 있고 일대일 대응하는 경우 우리는 함수하고 할수 있다.
이제부터 c언어의 함수를 프로시저로 순수함수를 함수 라고 표기하겠다.
프로시저는 항상 같은 값을 리턴하지 않는다. (side effect가 존재할 가능성이 있다) 
예를 들어서 
프로시저 a에서 글로벌 변수의 값을 변경하는 경우가 있다.
이를 다른 곳에서 a가 값을 변경하지 안았을 것이라고 가정하고 프로그램을 짠다면 문제가 생길수 있다.
ex)
global var g_var = original;
void a()
{
    g_var = something;
main()
{
    print(g_var); // original
    a();
    print(g_var); // something 
}
사용자가 원하는 값이 original인데 프로시저a를 실행한 이후에는 something이라는 값이 들어가게 된다.
 
반면에 순수 함수에서는 side effect가 없다. 그리고 무조건 리턴 값이 있어야 한다. 때문에 
어떤 함수a를 정의하고 아무리 호출해서 함수a가 리턴하는 값을 인자에 의해서만 결정된다.
그리고 다른 부분에 영향을 주지도 않는다. 그렇기 때문에  버그를 줄이는 것이 가능하다. 
단 제약조건이 생기기 때문에 프로그래밍하기가 까다롭다.
보통 c/c++ , python 개발자 라면 일단 개발을 한뒤에 디버깅 툴을 이용해서 버그를 잡아 내는 것에 익숙하기 때문에 함수형 언어로 개발 하는 것이 힘들 것이다.

댓글

이 블로그의 인기 게시물

대수학 - 직선의 방정식,기울기 , 수평, 법선

직선의 방정식  f(x) = x 6 + 3   다음 직선은 기울기(m)이 1이고 y 절편이 3인 직선이다. 직선의 방정식 m은 직선의 기울기 d는 y절편 x 절편 : y 값이 0 일때 x의 값 y 절편 : x 값이 0 일때 y의 값 ex) y = 3x +6 y 절편 put : x <- 0 y = 3 * 0 + 6 = 6 y = 6 6 y 절편 = 6 x 절편 put : y <- 0 0 = 3x + 6  -6 = 3x  , 이항 -6 / 3 = 3x/ 3  -2 = x  x = -2  x 절편 : -2  기울기를 구하는 법  기울기의 정의 기울기의 정의는 y축의 변화량을 x축의 변화량으로 나눈것이다. 따라서 이직선의 기울기를 구해보자 이렇게 2점이 주어진 경우에 기울기를 구할수 있다. dx = x2 - x1 dy = y2 - y1 따라서 m = (x2 - x1) / (y2 -  y1) 두 직선이 수평이기 위한 조건 두 직선의 기울기의 곱이 1이다 두 직선이 수직이기 위한 조건  즉 법선이기 위한 조건

미적분 - 극한

오늘 포스팅에서는 2주차 미적분강의에 대하여 리뷰를 해보겠습니다. 미적분이란  도함수를 구하는 것이다. 도함수를 구하기 위해서는 극한이라는 것이 사용된다. 식1-1 고등학교 3학년 시간에 많이 본 기호이다. 식 1-1은 x가 a에 한없이 가까워 질때 함수 f(x)의 값을 나타낸다. EX) 예제 1-1 여기에서 답은 3이지만 정확히는 3에 가까워 진다라는 의미이다. 예제 1-2 기분나쁘게 생겼지만 인수분해를 이용하여 풀수 있다. 한없이 작아지는 경우  x-> 0 => x 값이 0은 아니지만 점점 작아지고 있다. 한번 1/ x^2의 그래프를 그려보자 가로축이 x이다 x가 0에  가까워 지면 함수의 값이 무한이 커진다. 이렇게 표기한다. 무한대는 상수가 아닌 커지고 있는 상태를 의미한다. 그반대로 한없이 작아지는 경우도 있다. 위에 있는 두가지 경우( 무한이 커지거나 작아지는 상태)를 발산한다고 한다. 반대로 아까의 예제 처럼 어떤한 수에 가까워 지는 경우를 수렴한다고 한다. 위에 식에서는 함수 f(x)가 L에 수렴한다. 라고 표현한다. 우극한과 좌극한     좌극한은 좌측에서 값에 다가가는 것을 의미한다. 즉 작은 값에서 점점 커지면서 a에 접근한다. 우극한은 좌극한의 반대로 우측에서 다다가는 것을 의미한다. 즉 큰 값에서 작아지면서 a에 접근한다. 좌극한과 우극한의 값이 다른 캐이스 좌극한의 경우 x가 음수이기 때문에 분자의 절댓값 x는 양수 이지만 분모의 x는 음수이다. 그래서 음수 값이 된다. (양수/음수 = 음수) 이렇게  우극한과 좌극한이 다른 경우가 있다. 극한이 존재하기 위한 필요충분조건 극한 값이 존재하기 위해서는 좌극한의 값과 우극한의 값이 같아야 한다.

미적분 - 함수의 연속

함수의 연속 끊어지지 연속적으로 이어지는 함수를 연속함수 라고 한다. 3가지 조건이 있는데 1. 함수 f(a) 값이 존재 한다. 2. 극한의 값이 존재한다. 3. a에서 함수값과 극한값이 같아야 한다. EX) 1. f(x) = 3x^5 풀이 : a는 임의의 실수 f(a) = 3a^5 임으로 ※함수 f(x)는 구간 ( -inf , inf)에서 연속이다. 2. f(x) = 3/x-2 풀이 : a는 임의의 실수 f(a) = 3/a-2 이지만 x의 값이 2인경우 함수의 값이 없다. x = 2인 경우 불연속이고 다른 값에서는 연속이다. 3. x가 4가 아닌 모든 실수에서는 연속이지만 x가 4인경우 함수값과 극한 값이 다르기 때문에 불연속이다.