단계와 공간 유틸리티
단계와 공간 유틸리티 (Phase and Space Utilities)
racket/phase+space 라이브러리는 단계 레벨(phase level)과 바인딩 공간(binding space)을 합친 표현을 다루는 함수들을 제공해요. 특히 require 트랜스포머와 provide 트랜스포머를 쓸 때 유용해요.
출처: Racket Reference
본문
(require racket/phase+space)
package: base
이 절에서 다루는 바인딩들은 racket/base나 racket이 아니라 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?
phase와 space의 결합을 나타내는 값을 돌려줘요.
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?
shift를 p+s에 적용해 단계 레벨과 바인딩 공간의 새 결합을 만들어요.
procedure
(phase+space-shift+ shift additional-shift) → phase+space-shift?
shift : phase+space?
additional-shift : phase+space-shift?
shift와 additional-shift를 합성해, shift를 적용한 다음 additional-shift를 적용하는 것과 똑같이 동작하는 새 이동을 만들어요.
더 알아보기
- Require Transformers —
require트랜스포머. - Provide Transformers —
provide트랜스포머.