불리언
불리언 (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/bool과 racket 라이브러리가 제공해요. 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
b1과 b2의 배타적 논리합(exclusive or)을 반환합니다. b1과 b2 중 정확히 하나만 #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/base나 racket이 제공하는 게 아니라는 점에 주의할게요.
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?과 다른 서술어를 따로 쓰는 것보다 잠재적으로 더 빠릅니다.