views:

177

answers:

2

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?

+7  A: 

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.

j-g-faustus
+13  A: 

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.

Isaac Hodes
Your answer is better, since it also works with vectors, maps, strings etc. without converting them to seqs. I suppose the seq approach is suitable if you have an argument of unknown type and want to operate on a seq.
j-g-faustus