从clojure中的常见lisp替换(null x)函数的惯用方法

时间:2010-07-13 13:02:42

标签: clojure lisp common-lisp idiomatic

在Common Lisp中,您使用(null x)函数来检查空列表和nil值。

大多数逻辑上这都映射到

(or (nil?  x) (= '() x))

在clojure中。有人可以在Clojure中建议一种更惯用的方法吗?

2 个答案:

答案 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)
  ...)

来自clojure.org lazy

它有效,因为(seq nil)(seq ())都返回nil。

由于nil表示false,因此您不需要进行明确的无测试。