연산에서 쓰는 수가 어떤 수인지는 가리지 않고, 연산만 간추린 것이 있었다. 이 프로시저는 정수인지 실수인지 가리지 않고 곱할 수만 있다면 그 수를 세제곱 하도록 식을 간추려 놓은 것이다. 그런데 프로시저를 만들지 않으면
이 그림처럼, 연산이 필요할 때 마다 식을 만들어서 문제를 풀 수도 있다. 하지만 이렇게 하는 것은, 문제를 푸는 눈높이에 맞는 연산을 쓰지 못하고 언어에 기본으로 붙박여 있는 연산(여기서 곱셈)만 가지고 푸링업을 나타내야 하기 때문에 결코 좋은 방법이 아니다.
프로그래밍 언어에는, 계산에서 되풀이되는 방법을 간추려서 이름을 붙이는 힘, 곧 문제를 푸는 눈높이에 맞는 표현 수단을 곧바로 만들어 쓰는 기능이 있어야 한다. 그런 기능 하나가 바로 프로시저이다.
되풀이 되는 계산 방법을 간추리려면(수는 물론이고) 프로시저를 인자로 받는다거나 결과 값으로 되돌려 주는 프로시저를 만들 필요가 있다. 이와 같이 프로시저를 보통의 데이터처럼 사용하는 프로시저를 차수 높은 프로시저라 한다.
이 절에서는 되풀이되는 계산 방법을 요약하는데 차수 높은 프로시저가 얼마나 쓸모 있는지, 다시 말해 언어의 표현 능력을 얼마만큼 끌어올리는지 살펴보자.
1.3.1 프로시저를 인자로 받는 프로시저
세 프로시저가 같은 계산 방법을 씀을 쉽게 알아차릴 수 있다. 프로시저의 이름, 마디 값 a를 받아서 계산하는 함수, a 다음 값을 얻어내는 함수만 다를 뿐, 나머지는 거의 같다. 그러므로 다음 프로시저 틀에서 '빈 곳'을 채우면 앞서 나온 세 프로시저를 찍어낼 수 있다.
이렇게 여러 프로시저에 같은 계산 방법을 쓰고 있다는 것은, 이를 간추릴 때 슬모 있는 프로시저(표현 수단)가 나올 수 있음을 뒷받침한다.
지금 쓰는 프로시저 언어에서는 '빈 곳'을 인자 이름으로 바꿔서, 아래처럼 틀이 되는 프로시저를 만들 수 있다.
sum이 수의 넓이를 나타내는 a, b뿐 아니라 프로시저 인자 term과 next를 받고 있음을 눈여겨보자. sum을 쓰는 방법은 보통 프로시저와 같다. 이를테면(인자에 1을 더하는 프로시저 inc와 어울려)sum-cubes를 다음처럼 정의할 수 있다.
받은 대로 돌려주는 함수로 identity가 정의되어 있을 때, 프로시저 sum으로 sum-integers를 만들면 아래와 같다.
1.3.2 lambda로 나타내는 프로시저
'컴퓨터 프로그램의 구조와 해석 > 1장 프로시저를 써서 요약하는 방법' 카테고리의 다른 글
1.2 프로시저와 프로세스 (0) | 2022.01.31 |
---|---|
1.1 프로그램 짤 때 바탕이 되는 것 (0) | 2022.01.30 |