프로시저를 요약하는 방법 : 프로그램을 짤 때 바탕이 되는 것 1.1.4 묶음 프로시저

김주형·2022년 7월 16일
0

컴퓨터 프로그램의 구조와 해석

출처


procedure definition

이전에 알아본 좋은 프로그래밍 언어가 갖추어야 할 목록

  • 수와 산술 연산이 기본 데이터, 기본 프로시저다.
  • 엮은식을 겹쳐 쓰는 것이 여러 연산을 한데 묶는 수단이 된다.
  • 이름과 값을 짝 지워 정의한 것이 모자르나마 요약하는 수단이 된다.
    이번엔 프로시저를 어떻게 정의하는지 배워보자.
    프로시저 정의 : compound operation(복잡한 연산)에 이름을 붙여서 쓰는 방법, 큰 프로그램을 짤 때 아주 쓸모가 많다고 한다.

square

"제곱"을 어떻게 나타내는지 살펴보면서 배워보자.

수를 제곱하는 방법
'어떤 값을 제곱하려면, 같은 값을 두 번 곱한다.'

이런 생각을 컴퓨터에 옮겨보면 다음과 같다

;;; to square something, multiply it by itself.
(define (square x) (* x x))

sqaure라고 하는 이미 있던 다른 프로시저(define)를 하나로 묶어서 만든 compound procedure(묶음 프로시저)가 하나 생겼다.

  • 정의에 따라 값을 두 번 곱하는 연산
  • 곱할 값을 x라는 local name(갇힌 이름)으로 받아오는데, 자연어에서 대명사와 쓰임새가 비슷하다.
  • 이 프로시저 정의를 계산한 결과로, 새로운 묶음 프로시저가 하나 생기고, 그 이름을 square라고 지었다.

프로시저를 정의하는 문법은 다음과 같다

(define ([name][formal parameters]) [body])
  • name : 환경에서 프로시저를 가리키는 이름
  • formal parameters : 프로시저가 받아오는 인자를 가리키기 위해서 프로시저의 몸 속에서 쓰는 이름
  • body : 인자 이름을 넘겨받아 값으로 맞바꾼 다음, 그 식의 값을 도출
  • name과 formal paramters를 괄호로 묶어 놓은 이유는 인자를 주고 프로시저를 불러 쓰는 문법과 생김새가 똑같아서 라고함

sqaure 사용

앞서 정의한 square를 사용하며 재귀를 활용한 compound procedure의 원리와 구조를 음미해보자.

;: (square 21)
;;; 441
;: (square (+ 2 5))
;;; 49
;: (square (square 3))
;;; 81

square를 만들 때 *라는 기본 프로시저를 썼듯이 square 또한 다른 프로시저를 정의할 때 쓸 수 있다.

;;; x² + y²
;; (+ (sqaure x) (square y))

이 식에 이름을 붙이면?

(define (sum-of-squares))
	(+ (square x) (square y)
    
(sum-of-squares 3 4)
;;; 25

두 인자를 받아 제각기 제곱하여 더하는 프로시저 완성!

마찬가지로 sum-of-squares 또한 다른 프로시저를 정의할 때 쓸 수 있다.

(define f a)
	(sum-of-squares (+ a 1) ( * a 2)
    
(f 5)
;;; 136 (6² + 10²)

묶음 프로시저든 기본 프로시저든 쓰는 방법은 같다.
앞에서 sum-of-squares 프로시저의 정의만 놓고 보면,
그 몸 속에서 square라는 프로시저가 +나 *처럼 실행기에 처음부터 들어 있던 것인지, 아니면 새로 만든 것인지 구별하지 못한다.

profile
요행없음

0개의 댓글