R6RS Scheme: 파생 형과 매크로

R6RS Scheme: 파생 형과 매크로

Scheme의 파생 형(derived form)과 매크로 개념을 설명해요. 특수 형이 더 기본적인 형으로 번역되는 방식과 define-syntax로 새 문법 키워드를 만드는 방법을 다뤄요.

출처: 문서

본문

이 리포트에서 명시된 많은 특수 형들은 더 기본적인 특수 형들로 번역될 수 있어요. 예를 들어 let 표현식은 프로시저 호출과 lambda 표현식으로 번역될 수 있어요. 다음 두 표현식은 동등해요:

(let ((x 23)
      (y 42))
  (+ x y))  ⇒ 65
((lambda (x y) (+ x y)) 23 42)  ⇒ 65

let 표현식 같은 특수 형들은 *파생 형(derived forms)*이라고 불려요. 그 의미론이 문법 변환(syntactic transformation)에 의해 다른 종류의 형들의 의미론에서 파생될 수 있기 때문이에요. 일부 프로시저 정의도 파생 형이에요. 다음 두 정의는 동등해요:

(define (f x)
  (+ x 42))
(define f
  (lambda (x)
    (+ x 42)))

Scheme에서는 프로그램이 문법 키워드를 매크로에 바인딩함으로써 자신만의 파생 형을 만드는 것이 가능해요:

(define-syntax def
  (syntax-rules ()
    ((def f (p ...) body)
     (define (f p ...)
       body))))
(def f (x)
  (+ x 42))

define-syntax 구문은 패턴 (def f (p ...) body)과 일치하는 괄호 구조(여기서 f, p, body는 패턴 변수)가 (define (f p ...) body)로 번역되도록 명시해요. 따라서 예제에 나타난 def 형은 다음과 같이 번역돼요:

(define (f x)
  (+ x 42))

새 문법 키워드를 만들 수 있는 능력은 Scheme를 매우 유연하고 표현력 있게 만들어, 다른 언어에 내장된 많은 기능들을 Scheme에서 파생 형으로 만들 수 있게 해요.

더 알아보기 (Learn more)

출처: Derived forms and macros - R6RS