수색…


진실과 거짓

특수 기호 T 는 Common Lisp에서 true 값을 나타내고 특수 기호 NILfalse를 나타냅니다.

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.

사실 상수 또는 자기 평가 기호로 간주 할 수 있습니다. TNIL 은 다른 감각들 또한 특별합니다. 예를 들어 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

이러한 이유 때문에 ANDOR 은 부울 연산자가 아닌 다른 언어의 제어 구조와 더 유사하다고 간주 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow