단일 유닛 모듈

단일 유닛 모듈 (Single-Unit Modules)

racket/unit#lang 뒤의 언어 이름으로 사용하면, %#module-begin을 제외한 racket/unitracket/base의 모든 바인딩이 제공되며, 모듈 본문이 유닛 본문으로 취급됩니다. 이 페이지에서는 코드 단위(unit) 하나를 모듈로 감싸 표현하는 문법을 설명합니다.

출처: Racket Reference

본문

#lang 뒤의 언어 이름으로 racket/unit을 쓰면, racket/unitracket/base의 모든 바인딩이 제공됩니다(단 %#module-begin은 제외). 그리고 모듈 본문은 유닛 본문으로 취급됩니다. 이 본문은 다음 모듈 본문 문법을 만족해야 합니다.

module-body = require-decl ...
              (import tagged-sig-expr ...)
              (export tagged-sig-expr ...)
              init-depends-decl
              unit-body-expr-or-defn
              ...

require-decl = (require require-spec ...)
             | (begin require-decl ...)
             | derived-require-form

require-decl이 몇 번 나오든 그 다음의 모듈 내용은 racket/base에 접근 가능한 유닛 본문과 동일합니다.

결과로 만들어지는 유닛은 base@로 내보내집니다. 여기서 base는 바깥쪽 모듈의 이름에서 유래합니다(즉, 기호 이름이거나, 디렉터리와 파일 확장자를 뺀 경로입니다). 만약 모듈 이름이 -unit으로 끝나면, base-unit 앞의 모듈 이름에 해당합니다. 그렇지 않으면 모듈 이름 자체가 base가 됩니다.

더 알아보기

  • Racket Guide의 유닛(Units)과 모듈(Modules) 관련 내용
  • racket/unit의 유닛 문법 (unit, signature, compound-unit 등)