在Common Lisp中,您使用(null x)函数来检查空列表和nil值。
大多数逻辑上这都映射到
(or (nil? x) (= '() x))
在clojure中。有人可以在Clojure中建议一种更惯用的方法吗?
答案 0 :(得分:16)
要像在Common Lisp中那样获得Clojure中空列表的相同的结果,请使用empty?
函数。此功能位于核心库中:无需导入。
它也是一个谓词,后缀为 ?
,使您在代码中所做的更清楚一些。
=> (empty? '())
true
=> (empty? '(1 2))
false
=> (empty? nil)
true
正如j-g faustus已经指出的那样,seq
可以用于类似的效果。
答案 1 :(得分:10)
seq也作为测试结束, 已经惯用了(when (seq coll) ...)
它有效,因为(seq nil)
和(seq ())
都返回nil。
由于nil
表示false
,因此您不需要进行明确的无测试。