트랜스포머 헬퍼
트랜스포머 헬퍼 (Transformer Helpers)
매크로 트랜스포머(transformer)가 사용하도록 만들어진 프로시저들을 살펴볼게요. 단위와 시그니처의 정적 정보를 트랜스포머 안에서 꺼내 쓸 수 있게 해 줘요.
출처: Racket Reference
본문
(require racket/unit-exptime) | package: base
racket/unit-exptime 라이브러리는 매크로 트랜스포머가 쓰기 위한 프로시저를 제공해요. 특히 이 라이브러리는 보통 for-syntax로, define-syntax로 매크로를 정의하는 모듈에 import돼요.
procedure
(unit-static-signatures unit-identifier
err-syntax)
→
(list/c (cons/c (or/c symbol? #f)
identifier?))
(list/c (cons/c (or/c symbol? #f)
identifier?))
unit-identifier : identifier?
err-syntax : syntax?
unit-identifier가 define-unit(또는 그런 폼)을 통해 정적 단위 정보에 바인딩되어 있으면, 결과는 두 개의 값이에요. 첫 번째 값은 단위의 import용이고, 두 번째는 단위의 export용이에요. 각 결과 값은 리스트인데, 각 리스트 요소는 심볼 또는 #f를 식별자와 짝지어요. 심볼 또는 #f는 import·export의 태그를 나타내고(#f는 태그 없음을 뜻하고), 식별자는 해당 시그니처의 바인딩을 나타내요.
unit-identifier가 정적 단위 정보에 바인딩되어 있지 않으면 exn:fail:syntax 예외가 발생해요. 그 경우 주어진 err-syntax 인자가 오류의 소스로 쓰이고, unit-identifier가 상세 소스 위치로 쓰여요.
procedure
(signature-members sig-identifier
err-syntax) →
(or/c identifier? #f)
(listof identifier?)
(listof identifier?)
(listof identifier?)
sig-identifier : identifier?
err-syntax : syntax?
sig-identifier가 define-signature(또는 그런 폼)을 통해 정적 단위 정보에 바인딩되어 있으면, 결과는 네 개의 값이에요:
sig-identifier바인딩이 확장하는 시그니처를 나타내는 식별자 또는#f;- 시그니처가 제공/요구하는 변수를 나타내는 식별자 리스트;
- 시그니처 안의 변수 정의를 위한 식별자 리스트 (즉, import 시 제공되지만 시그니처를 구현하는 단위가 정의하지는 않는 변수 바인딩); 그리고
- 시그니처 안에서 구문 정의가 있는 식별자 리스트.
결과 식별자 각각에는 sig-identifier에 기반한 어휘 정보가 주어져서, 그 이름들은 sig-identifier의 컨텍스트에서 참조하거나 바인딩하기에 적합해요. 자세한 내용은 define-signature를 참고하세요.
sig-identifier가 시그니처에 바인딩되어 있지 않으면 exn:fail:syntax 예외가 발생해요. 그 경우 주어진 err-syntax 인자가 오류의 소스로 쓰이고, sig-identifier가 상세 소스 위치로 쓰여요.
procedure
(unit-static-init-dependencies unit-identifier
err-syntax)
→
(list/c (cons/c (or/c symbol? #f)
identifier?))
unit-identifier : identifier?
err-syntax : syntax?
unit-identifier가 define-unit(또는 그런 폼)을 통해 정적 단위 정보에 바인딩되어 있으면, 결과는 짝(pair)들의 리스트예요. 각 짝은 태그(또는 태그 없음의 #f)와 시그니처 이름을 결합해, 단위가 지정한 import에 대해 가지는 초기화 의존성을 나타내요. (즉, 같은 태그와 시그니처가 unit-static-signatures의 첫 결과에 포함돼요.)
unit-identifier가 정적 단위 정보에 바인딩되어 있지 않으면 exn:fail:syntax 예외가 발생해요. 그 경우 주어진 err-syntax 인자가 오류의 소스로 쓰이고, unit-identifier가 상세 소스 위치로 쓰여요.
패키지 base의 버전 6.1.1.8에서 추가됨.