불리언

불리언 (Booleans)

참과 거짓은 각각 #t#f라는 값으로 표현되는데, 자세히 보면 Racket의 참/거짓 판정은 생각보다 관대해요. 이 문서에서는 불리언 값과 관련 프로시저들을 설명할게요.

출처: Racket Reference

본문

4.2 불리언

참(true)과 거짓(false) 불리언은 각각 #t#f 값으로 표현됩니다. 다만 불리언 값에 의존하는 연산들은 보통 #f가 아닌 것은 무엇이든 참으로 취급해요. #t 값은 항상 자신과 eq?이고, #f도 항상 자신과 eq?입니다.

불리언 읽기에 대해서는 Reading Booleans, 불리언 출력에 대해서는 Printing Booleans를 참고하세요. and, or, andmap, ormap도 참고하세요.

boolean?

(boolean? v) → boolean?
  v : any/c

v#t 또는 #f이면 #t를, 그렇지 않으면 #f를 반환합니다.

예시:

> (boolean? #f)
#t

> (boolean? #t)
#t

> (boolean? 'true)
#f

not

(not v) → boolean?
  v : any/c

v#f이면 #t를, 그렇지 않으면 #f를 반환합니다.

예시:

> (not #f)
#t

> (not #t)
#f

> (not 'we-have-no-bananas)
#f

immutable?

(immutable? v) → boolean?
  v : any/c

v가 불변 문자열, 바이트 문자열, 벡터, 해시 테이블, 또는 박스이면 #t를, 그렇지 않으면 #f를 반환합니다.

immutable?은 (이름과 달리) 불변성을 위한 일반 서술어(predicate)가 아니라는 점에 주의하세요. 이 함수는 오직 한 서술어(string?, vector? 등)가 그 데이터형의 가변·불변 두 변형을 모두 인식하는 몇몇 데이터형에 대해서만 동작합니다. 특히 immutable?은 페어(pair)에 대해 #f를 반환하는데, 페어는 불변이지만 pair? 자체가 불변성을 함의하기 때문이에요.

immutable-string?, mutable-string? 등도 참고하세요.

예시:

> (immutable? 'hello)
#f

> (immutable? "a string")
#t

> (immutable? (box 5))
#f

> (immutable? #(0 1 2 3))
#t

> (immutable? (make-hash))
#f

> (immutable? (make-immutable-hash '([a b])))
#t

> (immutable? #t)
#f

4.2.1 불리언 별칭 (Boolean Aliases)

(require racket/bool)

package: base

이 섹션에 문서화된 바인딩들은 racket/boolracket 라이브러리가 제공해요. racket/base는 제공하지 않습니다.

true : boolean?

#t의 별칭입니다.

false : boolean?

#f의 별칭입니다.

symbol=?

(symbol=? a b) → boolean?
  a : symbol?
  b : symbol?

(a와 b가 심볼이라면) (equal? a b)를 반환합니다.

boolean=?

(boolean=? a b) → boolean?
  a : boolean?
  b : boolean?

(a와 b가 불리언이라면) (equal? a b)를 반환합니다.

false?

(false? v) → boolean?
  v : any/c

(not v)를 반환합니다.

nand

(nand expr ...)

(not (and expr ...))와 같습니다.

예시:

> (nand #f #t)
#t

> (nand #f (error 'ack "we don't get here"))
#t

nor

(nor expr ...)

(not (or expr ...))와 같습니다. 두 인자 경우에는, 두 인자 중 어느 것도 참 값이 아니면 #t를 반환합니다.

예시:

> (nor #f #t)
#f

> (nor #t (error 'ack "we don't get here"))
#f

implies

(implies expr1 expr2)

첫 번째 표현식이 두 번째 표현식을 함의(imply)하는지 확인합니다. (if expr1 expr2 #t)와 같습니다.

예시:

> (implies #f #t)
#t

> (implies #f #f)
#t

> (implies #t #f)
#f

> (implies #f (error 'ack "we don't get here"))
#t

xor

(xor b1 b2) → any
  b1 : any/c
  b2 : any/c

b1b2의 배타적 논리합(exclusive or)을 반환합니다. b1b2 중 정확히 하나만 #f가 아니면 그 값을 반환하고, 그렇지 않으면 #f를 반환합니다.

예시:

> (xor 11 #f)
11

> (xor #f 22)
22

> (xor 11 22)
#f

> (xor #f #f)
#f

4.2.2 가변성 서술어 (Mutability Predicates)

(require racket/mutability)

package: base

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

Added in version 8.9.0.3 of package base.

(mutable-string? v)   → boolean?
(immutable-string? v) → boolean?
(mutable-bytes? v)    → boolean?
(immutable-bytes? v)  → boolean?
(mutable-vector? v)   → boolean?
(immutable-vector? v) → boolean?
(mutable-box? v)      → boolean?
(immutable-box? v)    → boolean?
(mutable-hash? v)     → boolean?
(immutable-hash? v)   → boolean?
  v : any/c

string?, bytes?, vector?, box?, hash?immutable? 또는 그 역과 결합하는 서술어들입니다. 이 서술어들은 immutable?과 다른 서술어를 따로 쓰는 것보다 잠재적으로 더 빠릅니다.

더 알아보기