common-lisp
불린과 일반 불린
수색…
진실과 거짓
특수 기호 T
는 Common Lisp에서 true 값을 나타내고 특수 기호 NIL
은 false를 나타냅니다.
CL-USER> (= 3 3)
T
CL-USER> (= 3 4)
NIL
그들은 값 을 수정할 수없는 변수이기 때문에 표준에서 "상수 변수"(sic!)라고 불립니다. 결과적으로 다음과 같은 정상 변수에 대해서는 이름을 사용할 수 없습니다. 예 :
CL-USER> (defun my-fun(t)
(+ t 1))
While compiling MY-FUN :
Can't bind or assign to constant T.
사실 상수 또는 자기 평가 기호로 간주 할 수 있습니다. T
와 NIL
은 다른 감각들 또한 특별합니다. 예를 들어 T
도 유형 (다른 유형의 상위 유형)이며 NIL
도 빈 목록입니다.
CL-USER> (eql NIL '())
T
CL-USER> (cons 'a (cons 'b nil))
(A B)
일반화 된 부울
실제로 NIL
과 다른 모든 값은 Common Lisp에서 참값 으로 간주됩니다. 예를 들면 :
CL-USER> (let ((a (+ 2 2)))
(if a
a
"Oh my! 2 + 2 is equal to NIL!"))
4
이 사실을 부울 연산자와 결합하여 프로그램을보다 간결하게 만들 수 있습니다. 예를 들어 위의 예는 다음과 같습니다.
CL-USER> (or (+ 2 2) "Oh my! 2 + 2 is equal to NIL!")
4
매크로 OR
은 왼쪽에서 오른쪽 순으로 인수를 평가하고 NIL이 아닌 값을 찾으면 즉시이를 중지하고이를 반환합니다. 모두 NIL
이면 반환되는 값은 NIL
.
CL-USER> (or (= 1 2) (= 3 4) (= 5 6))
NIL
비슷하게 매크로 AND
는 왼쪽에서 오른쪽으로 인수를 평가하고 모두가 NIL이 아닌 것으로 평가되면 마지막 값을 반환하고 그렇지 않으면 NIL
을 찾으면 즉시 평가를 중지합니다.
CL-USER> (let ((a 2)
(b 3))
(and (/= b 0) (/ a b)))
2/3
CL-USER> (let ((a 2)
(b 0))
(and (/= b 0) (/ a b)))
NIL
이러한 이유 때문에 AND
및 OR
은 부울 연산자가 아닌 다른 언어의 제어 구조와 더 유사하다고 간주 할 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow