Discussion:
how to check if a list is empty or nil?
(too old to reply)
ssecorp
2008-08-23 15:59:31 UTC
Permalink
(not (= lst nil))

(/= lst nil)

empty?, list?, nil? does not work either.

do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
Brian
2008-08-23 16:07:50 UTC
Permalink
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
Use NULL. ENDP also works.
Kenny
2008-08-23 16:19:11 UTC
Permalink
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
lst. Or list if you realize you are not doing scheme.

kt
ssecorp
2008-08-23 16:42:14 UTC
Permalink
Post by Kenny
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
lst. Or list if you realize you are not doing scheme.
kt
huh?
DeverLite
2008-08-23 18:06:02 UTC
Permalink
Post by Kenny
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
lst. Or list if you realize you are not doing scheme.
kt
huh?
I think Kenny's point is that you can use the name "list" rather than
"lst", and this will not conflict with the function (named "list")
because, unlike scheme, CL has a separate namespace for functions.
Pascal J. Bourguignon
2008-08-23 18:51:05 UTC
Permalink
Post by DeverLite
Post by Kenny
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
lst. Or list if you realize you are not doing scheme.
kt
huh?
I think Kenny's point is that you can use the name "list" rather than
"lst", and this will not conflict with the function (named "list")
because, unlike scheme, CL has a separate namespace for functions.
No. Kenny's point is that to test for a not null list you can just
write list. In the same way that in C, to test for a non zero integer
you can just write integer.


And the OP should try reading some initiation book about Common Lisp,
like:

Common Lisp: A Gentle Introduction to Symbolic Computation
http://www-cgi.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/LispBook/index.html
http://www.cs.cmu.edu/~dst/LispBook/
--
__Pascal Bourguignon__ http://www.informatimago.com/
Kitty like plastic.
Confuses for litter box.
Don't leave tarp around.
Kenny
2008-08-23 19:14:48 UTC
Permalink
Post by Kenny
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
lst. Or list if you realize you are not doing scheme.
kt
huh?
1. nil is false
2. there is no need to mangle the name
3. 1 and 2 are false in Scheme

kt

Barry Margolin
2008-08-23 17:02:25 UTC
Permalink
In article
Post by ssecorp
(not (= lst nil))
(/= lst nil)
= and /= are for numbers. EQ is the predicate you should use if you
want to compare with NIL.
Post by ssecorp
empty?, list?, nil? does not work either.
Others have mentioned NULL. There's also NOT (although that should
generally only be used when you're treating it as a boolean, rather than
a list) and ENDP (which is generally used when you're iterating, hence
the name).
Post by ssecorp
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
--
Barry Margolin, ***@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
*** PLEASE don't copy me on replies, I'll read them in the group ***
Chris Russell
2008-08-23 18:38:56 UTC
Permalink
Post by ssecorp
(not (= lst nil))
(/= lst nil)
empty?, list?, nil? does not work either.
do I really have to use (= 0 (length lst))
seems inefficient if the lists can be big.
The empty list is false so you can write

(if list
(do stuff);non-empty case
(do other stuff));empty case

Otherwise do what Barry says.
Loading...