NIL and T in lisp

wxie

1 July 2024

Return to index

Article published by: wxie

Date of publication: 1 July 2024

Recently, I read again the book “Evolution of Lisp” by Gay L. Steele Jr. and Richard P. Gabriel. I am interested in the discussion of NIL in the history of lisp. Here I have made some experiement about them in SBCL (Common Lisp) and Guile (Scheme).

system input result comment
SBCL nil NIL regardless of capitalization
SBCL () NIL
SBCL ’() NIL
SBCL t T regardless of capitalization
SBCL (atom nil) T
SBCL (listp nil) T
SBCL (atom ()) T
SBCL (atom ’()) T
SBCL (listp ()) T
SBCL (listp ’()) T
SBCL (null nil) T
SBCL (null ()) T
SBCL (null ’()) T
SBCL (first nil) NIL
SBCL (first ()) NIL
SBCL (rest nil) NIL
SBCL (rest ()) NIL
SBCL (atom t) T
SBCL (listp t) NIL
SBCL (null t) NIL
Guile nil unbound
Guile t unbound
Guile () syntax error
Guile ’() ()
Guile (list? ’()) #t
Guile (pair? ’()) #f
Guile (car ’()) wrong type expecting pair
Guile (cdr ’()) wrong type expecting pair
Guile #f #f false
Guile #t #t true
Guile #false #f false
Guile #true #t true

So it’s clear that NIL is a complex thing in Common Lisp, while Scheme avoids this.

Markdown file for this page: https://wxie.codeberg.page/blog/nil-t-in-lisp.md

Subscribe to RSS for this site

This HTML page was generated by the Untitled Static Site Generator.