단계와 공간 유틸리티

단계와 공간 유틸리티 (Phase and Space Utilities)

racket/phase+space 라이브러리는 단계 레벨(phase level)과 바인딩 공간(binding space)을 합친 표현을 다루는 함수들을 제공해요. 특히 require 트랜스포머와 provide 트랜스포머를 쓸 때 유용해요.

출처: Racket Reference

본문

(require racket/phase+space)

package: base

이 절에서 다루는 바인딩들은 racket/baseracket이 아니라 racket/phase+space 라이브러리에서 제공돼요.

racket/phase+space 라이브러리는 단계 레벨과 바인딩 공간의 결합 표현을 다루는 함수들을 제공해요. 특히 require 트랜스포머와 provide 트랜스포머에 사용되는 표현들이에요.

identifier-binding(그리고 identifier-transformer-binding 같은 연관 함수), syntax-local-module-exports, syntax-local-module-required-identifiers, module-compiled-exports 또는 module->exports가 단계-공간 결합(또는 단계-공간 이동 결합)을 만들어내면, 서로 equal?인 두 값은 eqv?이 돼요.

base 패키지의 8.2.0.3 버전에서 추가됐어요.

procedure

(phase? v) → boolean?
  v : any/c

v가 단계 레벨의 유효한 표현이면 #t를, 그렇지 않으면 #f를 돌려줘요. 유효한 표현은 번호가 매겨진 단계 레벨을 나타내는 정확한 정수이거나, 라벨 단계 레벨을 나타내는 #f예요.

procedure

(space? v) → boolean?
  v : any/c

v가 바인딩 공간의 유효한 표현이면 #t를, 그렇지 않으면 #f를 돌려줘요. 유효한 표현은 make-interned-syntax-introducer로 접근되는 스코프를 가진 공간을 나타내는 interned 심볼이거나, 기본 바인딩 공간을 나타내는 #f예요.

procedure

(phase+space? v) → boolean?
  v : any/c

v가 단계 레벨과 바인딩 공간 결합의 유효한 표현이면 #t를, 그렇지 않으면 #f를 돌려줘요. 가능한 표현은 다음과 같아요:

  • 그 자체로 (단계?...의 의미에서) 단계 하나. 그 단계에 기본 바인딩 공간을 더한 것을 나타내요.

  • car가 단계이고 cdr이 (space?의 의미에서) #f가 아닌 공간인 페어.

procedure

(phase+space phase space) → phase+space?
  phase : phase?
  space : space?

phasespace의 결합을 나타내는 값을 돌려줘요.

procedure

(phase+space-phase p+s) → phase?
  p+s : phase+space?
(phase+space-space p+s) → phase?
  p+s : phase+space?

결합에서 단계 레벨 또는 바인딩 공간 성분을 추출해요.

procedure

(phase+space-shift? v) → boolean?
  v : any/c

v가 단계 레벨 이동(shift)과 바인딩 공간 이동 결합의 유효한 표현이면 #t를, 그렇지 않으면 #f를 돌려줘요. 이동은 phase+shift+를 사용해 단계 레벨과 바인딩 공간의 결합에 적용할 수 있어요. 이동의 가능한 표현은 다음과 같아요:

  • exact integer — 단계 레벨을 이동할 양을 나타내며 바인딩 공간은 바뀌지 않아요.

  • #f — 라벨 단계 레벨로의 이동을 나타내며 바인딩 공간은 바뀌지 않아요.

  • car가 exact integer 또는 #f이고 cdr이 (space?의 의미에서) 공간인 페어 — car에서의 단계 레벨 이동과 cdr에 있는 바인딩 공간으로의 변경을 나타내요.

procedure

(phase+space+ p+s shift) → phase+space?
  p+s : phase+space?
  shift : phase+space-shift?

shiftp+s에 적용해 단계 레벨과 바인딩 공간의 새 결합을 만들어요.

procedure

(phase+space-shift+ shift additional-shift) → phase+space-shift?
  shift : phase+space?
  additional-shift : phase+space-shift?

shiftadditional-shift를 합성해, shift를 적용한 다음 additional-shift를 적용하는 것과 똑같이 동작하는 새 이동을 만들어요.

더 알아보기