소프트웨어/Scheme

[Scheme] 3. Scheme으로 기본 식을 표현하는 방법

리습 2013. 6. 1. 14:01


 안녕하십니까. 리습입니다.


 우리는 저번에  Racket을 설치하고 스킴을 공부할 준비를 하였습니다. 하지만 아직  Scheme(스킴)에 대하여 배운것이 없고 Racket이라는 툴도 사용해 본적이 없기 때문에 스킴을 공부하는 동시에 툴의 사용 방법도 알아보도록 하겠습니다. 

 

 우선 스킴은 함수형 언어입니다. 특정 식을 표현한 함수 형태를 만들어 이를 이용해 전체 프로그램을 만드는 것입니다. ( 쉽게 생각하면 F(x) 등으로 함수 식을 만들고 이 식들을 필요할 때 불러내서 쉽게 사용하는 것입니다.) 그렇기 때문에 스킴은 기본적으로 이러한 함수를 만들 수 있도록 지원하고 있습니다. 또한 기본적인 더하기, 빼기 , 곱하기, 나누기등의 기본식은 언어 차원에서 지원하고 있습니다.

 

 그럼 우선 어떻게 식을 표현하는지 알아보도록 하겠습니다.

 

 스킴은 모든 식을 ( ) 괄호를 통해서 표현합니다. 또한 연산자를 앞쪽에 두고 피 연산자들을 뒷쪽에 배열하는 식으로 표현합니다. 예를 들어 3 + 2 는 스킴에서 다음과 같이 표현합니다.

 

 ( + 3 2 )

 

 기본 형태는 다음과 같습니다. 

 

( <연산자>  <피연사자 1>  <피연사자 2>  ..... )

 

1. <연산자> : 원하는 연산자 기호를 넣습니다. + - 가 될 수도 있으며 각종 함수의 이름이 될수도 있습니다. 

2. <피연산자 1, 2... > : 피연산자를 넣습니다. 왼쪽에서 오른쪽으로 차례차례 진행됩니다.

예시 : ( - 5 2 ) , ( * 3 20 ) , ( /  40 10 ) 

 

그럼 정말로 작동을 하는지 Racket 에서 실습해보도록 하겠습니다.



 

Racket 을 실행시킨후 하단에서 언어를 The Racket Language 로 체크해줍니다. Racket은 무료 소프트웨어일 뿐만아니라 한글화가 매우 잘되있어서 접근하기가 매우 유용합니다. 상단의 공간은 선언부입니다. 스킴을 이용한 함수 등을 선언해 두는 부분으로 아직은 사용하지 않을 것입니다. 이제 아래에 있는 빈 공간을 보도록 하겠습니다. 환영합니다. 라는 인사와 함께 커서가 있습니다. 이곳이 우리가 실습을 할 공간입니다. 이곳에 스킴 문법을 통하여 글을 작성하면 컴퓨터가 즉각 그 결과값을 출력해 주는것입니다. 한번 위에서 배웠던 더하기 연산을 해보도록 하겠습니다.  ( + 20 10 ) 이라고 타이핑한후 엔터를 입력하도록 하겠습니다.

 

  

 

  다음과 밑에 30 이라고 출력되어질 것입니다. 이렇게 컴퓨터와 대화하는 형식으로 한줄한줄 프로그램을 작성하는 것입니다. 이와 같이 특별히 통체로 번역하는 과정을 거치지 않고 한줄한줄 해석하는 것을 인터프릭터라 합니다. (쉽게 생각하면 C, JAVA, C# 과 같이 작성후 컴파일을 시켜주는 언어는 컴파일을 해야지만 사용할 수 있고 인터프릭터 언어는 작성후 한줄한줄 결과값을 볼수 있다 정도로 생각하셔도 됩니다.) 작성후 결과값을 바로 볼수 있죠. 그래서 우리가 글을 작성하면 즉각해서 결과값을 보여주는 것입니다.

 

 그런데 연산자를 2개를 넣을 것이 아니라 3개 4개를 넣을 경우 어떻게 되실지 궁금하실 겁니다.  위에서 왼쪽에서 오른쪽으로 해석된다 라고 설명을 하긴 했지만 아리송하긴 마찬가지이실겁니다. 한번 나누기를 통해서 확인해보도록 하겠습니다. ( / 50 5 2 ) 를 작성해보도록 하겠습니다.

 

 

 

 위 결과 값을 보면 왼쪽에서 오른쪽으로 차례차례 연산한다는 것이 이해되실 겁니다. 50 에서 5로 나누기를 시행한후 이에 대한 결과값 10에 대해서 2로 나누기 떄문이죠. 그래서 결과값이 5가 나오는 것입니다.  

 

 그렇다면 곱하기 더하기 빼기 나누기가 여러가지 중첩 되어 있는 식은 어떻게 표현해야 하는가? 라고 하시면 괄호를 적절하게 사용하시면 됩니다.  예시를 한번 보도록 하겠습니다.

 

  (+ (- (* 20 3) 3) (* ( /  20 10) (* 2 3 ))) 이런식으로 쓰시면 됩니다. 컴퓨터가 알아보기 위해 써서 그렇지 실제 우리가 일상적으로 쓰는 식으로 표현하면 

 (( 20 x 3) - 3) + ((20 / 10 ) x (3 x 6)) 입니다. 저런식으로 한줄로 쓰게되면 알아보기 어렵기 때문에 들여쓰기 라는 것을 하게 됩니다. 

  


이런식으로 작성하게 되면 보기에도 깔끔하고 읽기에도 편리하기 때문에 유지보수에 쉬운 코드가 되는 것입니다.

 

LISP 리습이 원래 수학식의 표현 및 계산을 위해 태어 났기 때문에 수학식을 표현하는데 매우 편리한 구조로 되어 있습니다. 이러한 리습을 특징을 이어받은 스킴또한 마찬가지이지요. 많은 형태들을 ( ) 괄호를 통해서 표현하고 사용 하기 때문에 괄호를 잘 해석하는 것이 가장 중요합니다. 여러가지 식을 더 표현해 보시면서 잘 이해하시길 바랍니다.