common-lisp                
            Booleans e Booleans generalizzati
        
        
            
    Ricerca…
Vero e falso
 Il simbolo speciale T rappresenta il valore true in Common Lisp, mentre il simbolo speciale NIL rappresenta false : 
CL-USER> (= 3 3)
T
CL-USER> (= 3 4)
NIL
Si chiamano "Variabili Costanti" (sic!) Nello standard, poiché sono variabili il cui valore non può essere modificato. Di conseguenza, non è possibile utilizzare i loro nomi per le variabili normali, come nell'esempio seguente, errato:
CL-USER> (defun my-fun(t)
           (+ t 1))
While compiling MY-FUN :
Can't bind or assign to constant T.
 In realtà, si possono considerare semplicemente come costanti o come simboli auto-valutati. T e NIL sono speciali anche in altri sensi. Ad esempio, T è anche un tipo (il supertipo di qualsiasi altro tipo), mentre NIL è anche la lista vuota: 
CL-USER> (eql NIL '())
T
CL-USER> (cons 'a (cons 'b nil))
(A B)
Booleani generalizzati
 In realtà qualsiasi valore diverso da NIL è considerato un valore vero in Common Lisp. Per esempio: 
CL-USER> (let ((a (+ 2 2)))
           (if a
               a
               "Oh my! 2 + 2 is equal to NIL!"))
4
Questo fatto può essere combinato con gli operatori booleani per rendere i programmi più concisi. Ad esempio, l'esempio sopra è equivalente a:
CL-USER> (or (+ 2 2) "Oh my! 2 + 2 is equal to NIL!")
4
 La macro OR valuta i suoi argomenti in ordine da sinistra a destra e si ferma non appena trova un valore non NIL, restituendolo. Se tutti sono NIL , il valore restituito è NIL : 
CL-USER> (or (= 1 2) (= 3 4) (= 5 6))
NIL
 Analogamente, la macro AND valuta i suoi argomenti da sinistra a destra e restituisce il valore dell'ultimo, se tutti sono valutati su non-NIL, altrimenti arresta la valutazione non appena trova NIL , restituendola: 
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
 Per questi motivi, AND e OR possono essere considerati più simili alle strutture di controllo di altri linguaggi, piuttosto che agli operatori booleani.