블록: block

블록: block

block은 지역 정의(definitions)와 표현식(expressions)을 한 몸통 안에 섞어 쓰고 싶을 때 사용하는 폼이에요. 모듈 본문처럼 서로 재귀적인 정의와 표현식을 함께 담을 수 있죠.

출처: Racket Reference

본문

(require racket/block)

package: base

이 섹션에 문서화된 바인딩들은 racket/block 라이브러리가 제공해요. racket/baseracket이 제공하는 게 아니라는 점에 주의할게요.

block

(block defn-or-expr ...)

block은 마치 모듈 본문처럼 표현식과 서로 재귀적인 정의(definitions)를 섞어 지원합니다. 내부 정의(internal-definition) 문맥과는 달리, 마지막 defn-or-expr이 반드시 표현식일 필요는 없어요.

block 폼의 결과는 마지막 defn-or-expr이 표현식이라면 그 결과이고, 그렇지 않으면 #<void>예요. defn-or-expr이 하나도 없으면(begin 폼을 평탄화한 뒤 기준으로) 결과는 #<void>입니다. 마지막 defn-or-expr이 표현식이라면 꼬리 위치(tail position)에서 실행돼요.

예시:

> (define (f x)
    (block
      (define y (add1 x))
      (displayln y)
      (define z (* 2 y))
      (+ 3 z)))
> (f 12)
13

29

더 알아보기