I do not see why we need nil
[1] when to cons
a sequence (so-called proper list) of items. It seems to me we can achieve the same goal by using the so-called improper list (cons
-ed pairs without an ending nil
) alone. Since Lisps [2] have already provided a primitive procedure to distinguish between a pair?
and an atom (some implementations even provide atom?
), when defining a procedure on a list, e.g., length
, I can do the same with just dotted-pairs, as shown below:
(define len
(lambda (l)
(cond ((pair? l) (+ 1 (len (cdr l))))
(else 1) ) ) )
It is obvious that we can apply this procedure to an improper list like '(1 . (2 . 3))
to get the expected answer 3
, in contrast to the traditional (length '(1 2 3))
.
I'd like to hear any opinions in defense of the necessity of nil
. Thanks in advance.
[1] Let's ignore the debate among nil
/NIL
, '()
and ()
.
[2] Here it means the Lisp family of languages.