트랜스포머 헬퍼

트랜스포머 헬퍼 (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-identifierdefine-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-identifierdefine-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-identifierdefine-unit(또는 그런 폼)을 통해 정적 단위 정보에 바인딩되어 있으면, 결과는 짝(pair)들의 리스트예요. 각 짝은 태그(또는 태그 없음의 #f)와 시그니처 이름을 결합해, 단위가 지정한 import에 대해 가지는 초기화 의존성을 나타내요. (즉, 같은 태그와 시그니처가 unit-static-signatures의 첫 결과에 포함돼요.)

unit-identifier가 정적 단위 정보에 바인딩되어 있지 않으면 exn:fail:syntax 예외가 발생해요. 그 경우 주어진 err-syntax 인자가 오류의 소스로 쓰이고, unit-identifier가 상세 소스 위치로 쓰여요.

패키지 base의 버전 6.1.1.8에서 추가됨.

더 알아보기