In Common Lisp you use the (null x) function to check for empty lists and nil values.
Most logically this maps to
(or (nil? x) (= '() x))
In clojure. Can someone suggest a more idiomatic way to do it in Clojure?
To get the same result for an empty list in Clojure as you do in Common Lisp, use the empty?
function. This function is in the core library: no imports are necessary.
It is also a predicate, and suffixed with a ?
, making it a little clearer what exactly you're doing in the code.
=> (empty? '())
true
=> (empty? '(1 2))
false
=> (empty? nil)
true
As j-g faustus already noted, seq
can be used for a similar effect.
seq also serves as test for end, already idiomatic
(when (seq coll) ...)
From clojure.org lazy
It works because (seq nil)
and (seq ())
both return nil.
And since nil
means false
, you don't need an explicit nil test.
NIL
and()
(the empty list) are one and the same thing. Your code snippet is a pleonasm. – Svante(= '() nil) => false
. In other Lisps, this is true. – Isaac