null?、pair?、list? 手続き
Scheme にはリストの種類を判別するための手続きは、3 つある。
null?
(null? '()) ; => #t (null? (list)) ; => #t (null? '(a)) ; => #f (null? 'a) ; => #f
null? 手続きは、とにかく空リストだった場合は #t を返す。
pair?
(pair? '()) ; => #f (pair? '(a)) ; => #t (pair? '(a b)) ; => #t (pair? '(a . b)) ; => #t (pair? 'a) ; => #f
pair? 手続きは、空リスト以外のペアなら #t を返す。厳密には空リストはペアではないので「空リスト以外のペア」という表現はおかしい。
list?
(list? '()) ; => #t (list? '(a)) ; => #t (list? '(a b)) ; => #t (list? '(a . b)) ; => #f (list? 'a) ; => #f
list? 手続きは、空リストを含むリストなら #t を返す。表現が難しいんだけど、リストの最後が空リストなら #t になる、という理解でよいはず。逆に言うと、空リストで終わらないものは、リストではない、ということになる。